Android之Handler
Handler
1.什麼是Handler
Android手機中只能在建立View的執行緒中才能修改View中的資料
在某些情況下, 主執行緒建立了一個View, 我們要修改View中的資料, 而這時資料只有新執行緒才能獲取到.
主執行緒可以修改, 但沒有資料
新執行緒有資料, 但不能修改
這時就可以用Handler來解決
新執行緒把資料傳送到主執行緒
sendMessage:
在新執行緒中呼叫sendMessage()方法, 傳入一個Message物件.
這時建立Handler的執行緒就會執行handleMessage()方法, 得到那個Message物件
post:
在新執行緒中呼叫post()方法, 傳入一個Runnable物件.
使用post
1.什麼是Handler
Android手機中只能在建立View的執行緒中才能修改View中的資料
在某些情況下, 主執行緒建立了一個View, 我們要修改View中的資料, 而這時資料只有新執行緒才能獲取到.
主執行緒可以修改, 但沒有資料
新執行緒有資料, 但不能修改
這時就可以用Handler來解決
新執行緒把資料傳送到主執行緒
主執行緒接收資料, 修改VIew
2.Handler的使用
如果需要在新執行緒中和主執行緒通訊, 那麼可以先在主執行緒中建立一個Handler, 把Handler的引用傳遞給新執行緒sendMessage:
在新執行緒中呼叫sendMessage()方法, 傳入一個Message物件.
這時建立Handler的執行緒就會執行handleMessage()方法, 得到那個Message物件
post:
在新執行緒中呼叫post()方法, 傳入一個Runnable物件.
這時建立Handler的執行緒就會執行Runnable的run()方法.
例子:
介面中有TextView和Button兩個元件。
當點選Button的時候,讓TextView的數字自增。
注意:改變TextView的操作必須在新執行緒中完成。因為所有操作都在主執行緒中執行,一旦有延遲,介面就卡住了,而在新執行緒中執行就可以避免這種情況的發生。
使用sendMessage
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView numET;
private int count = 10;
private Handler handler = new Handler(){
public void handleMessage(Message msg) {//當呼叫handler的sendMessage(msg)時,handleMessage(Message msg)就會執行
switch (msg.what) {//判斷Message的識別符號
case 1:
String num = msg.getData().getString("num");
numET.setText(num);
break;
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
numET = (TextView) findViewById(R.id.numTV);
}
public void add(View view) throws InterruptedException{
new Thread(){
public void run() {
Message msg = new Message();//建立一個訊息物件
msg.getData().putString("num",++count+"");//獲取訊息物件中存放資料的一個Map集合,儲存資料
msg.what = 2;//這個是用於區分多個Message的識別符號
handler.sendMessage(msg);//傳送訊息到建立Handler的執行緒,那個執行緒就會自動執行handlerMessage()方法
};
}.start();
}
}
使用post
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView numET;
private int count = 3;
private Handler handler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
numET = (TextView) findViewById(R.id.numTV);
}
public void add(View view) throws InterruptedException{
new Thread(){
public void run() {
handler.post(new Runnable() {//在新執行緒中傳送一個Runnable給建立Handler的執行緒,建立Handler的執行緒就會執行Runnable中的run方法
public void run() {
numET.setText(++count+"");
}
});
};
}.start();
}
}
相關文章
- Android Handler機制之Handler 、MessageQueue 、LooperAndroidOOP
- Android 基礎之 HandlerAndroid
- Android開發之HandlerAndroid
- Android 進階 ———— Handler系列之建立子執行緒HandlerAndroid執行緒
- Android原始碼學習之handlerAndroid原始碼
- Android Handler機制之ThreadLocalAndroidthread
- Android Handler機制之總目錄Android
- [Handler]android-Handler解釋Android
- 深入探索Android訊息機制之HandlerAndroid
- Android中HandlerAndroid
- Android Handler原理Android
- Android 之 “只是想來談談 Handler 機制”Android
- Android Handler機制之記憶體洩漏Android記憶體
- Handler全家桶之 —— Handler 原始碼解析原始碼
- Android學習-HandlerAndroid
- Android中的handlerAndroid
- Android之Handler訊息傳遞機制詳解Android
- Android解惑之Handler為什麼需要是static的Android
- Android 之 Looper、MessageQueue、Handler 與訊息迴圈AndroidOOP
- Android訊息傳遞之Handler訊息機制Android
- Android Handler機制之Message的傳送與取出Android
- Android Handler 原始碼解析Android原始碼
- Android Handler 原始碼探索Android原始碼
- Android Handler面試總結Android面試
- Android——Handler原始碼分析Android原始碼
- Android Handler機制理解Android
- Android Handler原理詳解Android
- Android中Handler的使用Android
- Android 面試(五):探索 Android 的 HandlerAndroid面試
- Android Handler機制之Message及Message回收機制Android
- Android Handler機制之迴圈訊息佇列的退出Android佇列
- Android全面解析之由淺及深Handler訊息機制Android
- android訊息機制—HandlerAndroid
- Android學習筆記·HandlerAndroid筆記
- Android訊息機制HandlerAndroid
- Android 8.1 Handler 原始碼解析Android原始碼
- Android Handler機制詳解Android
- Android:Handler學習總結Android