大家好,倉促的時間裏面,爲大家帶來點乾貨,可能大家在別的地方也看見過類似的,但是我還是想整理出來,希望大家喜歡。
在安卓很早的時候,很多操作都是在主線程中完成的,隨着用戶體驗和app的友好性的不斷提升,android把耗時操作都放在了子線程中進行。由此我們的handler就尤爲重要了,簡單的介紹下handler;
-
一、Handler的定義:
Handler主要用於異步消息的處理:當發出一個消息之後,首先進入一個消息隊列,發送消息的函數即刻返回,而另外一個部分在消息隊列中逐一將消息取出,然後對消息進行處理,也就是發送消息和接收消息不是同步的處理。 這種機制通常用來處理相對耗時比較長的操作。
- 二、Handler一些特點
- 傳遞Message。用於接受子線程發送的數據, 並用此數據配合主線程更新UI。
- 傳遞Runnable對象。用於通過Handler綁定的消息隊列,安排不同操作的執行順序。
post(Runnable)
postAtTime(Runnable,long)
postDelayed(Runnable,long)
sendEmptyMessage(int)
sendMessage(Message)
sendMessageAtTime(Message,long)
sendMessageDelayed(Message,long)
好了說了這麼多,那我們就用一個實例來看下Handler是怎麼完成的吧;
activity_splash.xml 啓動頁的代碼
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="5s"
android:textColor="@color/colorAccent"
android:textSize="20sp" />
</RelativeLayout>
SplashActivity 中的代碼
public class SplashActivity extends Activity {
private static int TIME = 5; private TextView mTime; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case 1: TIME--; mTime.setText(TIME + "s"); if (TIME > 0) { Message message = handler.obtainMessage(1); handler.sendMessageDelayed(message, 1000); // send message } else { //跳轉到主界面 goHome(); } } super.handleMessage(msg); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_splash); mTime = (TextView) findViewById(R.id.tv_time); Message message = handler.obtainMessage(1); handler.sendMessageDelayed(message, 1000); } private void goHome() { Intent intent = new Intent(SplashActivity.this, MainActivity.class); startActivity(intent); finish(); } }
總結:通過 handler.sendMessageDelayed(message, 1000); 方法,我們設置的是1秒鐘通知handler改變我們界面的倒計時,我爲什麼在佈局文件中的TextView中填寫一個android:text=”5s” 這個是主要當你打開程序的時候出現短暫的界面空白所做的。我自己實踐了感覺還不錯,希望大家能夠喜歡,也希望老鳥們不要嫌棄~
喜歡的也可以掃碼我的公衆號關注一下哦