編輯:關於android開發
1、Android中Handler的使用,一般都在UI主線程中執行,因此在Handler接收消息後,處理消息時,不能做一些很耗時的操作,否則將出現ANR錯誤。
2、HandlerThread繼承於Thread,所以它本質就是個Thread。(本身是一個線程)
3、與普通Thread的差別就在於,主要的作用是建立了一個線程,並且創立了消息隊列,有自己的looper,可以讓我們在自己的線程中分發和處理消息。
1、Handler的處理過程運行在創建Handler的線程裡
2、一個線程對應一個Looper,一個Looper對應一個MessageQueue,一個Looper可以對應多個Handler。
3、handler應該由處理消息的線程創建。
4、handler與創建它的線程相關聯,而且也只與創建它的線程相關聯。handler運行在創建它的線程中,所以,如果在handler中進行耗時的操作,會阻塞創建它的線程。
5、Looper.myLooper(); //獲得當前的Looper
Looper.getMainLooper() //獲得UI線程的Lopper
6、Handle的初始化函數(構造函數),如果沒有參數,那麼他就默認使用的是當前的Looper,如果有Looper參數,就是用對應的線程的Looper。
7、如果一個線程中調用Looper.prepare(),那麼系統就會自動的為該線程建立一個消息隊列,然後調用Looper.loop();之後就進入了消息循環,這個之後就可以發消息、取消息、和處理消息。
Android的線程分為有消息循環的線程和沒有消息循環的線程,有消息循環的線程一般都會有一個Looper。事實上Android提供了一個封裝好的帶有looper的線程類,即為HandlerThread
1 package app.com.myapplication;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.os.Handler;
6 import android.os.HandlerThread;
7 import android.os.Looper;
8 import android.os.Message;
9 import android.widget.Toast;
10
11 /**
12 * Created by ${zyj} on 2016/2/15.
13 *
14 */
15 public class HandlerThreadActivity extends Activity {
16
17 private HandlerThread handlerThread ;
18 private Handler handler;
19
20 @Override
21 protected void onCreate(Bundle savedInstanceState) {
22 super.onCreate(savedInstanceState);
23
24 // 1:創建一個HandlerThread,即創建了一個包含Looper的線程。
25 handlerThread = new HandlerThread("leochin.com");
26 handlerThread.start(); //創建HandlerThread後一定要記得start()
27
28 //2:獲取HandlerThread的Looper
29 Looper looper = handlerThread.getLooper();
30
31 //3:創建Handler,通過Looper初始化
32 handler = new Handler(looper) {
33
34 @Override
35 public void handleMessage(Message msg) {
36 super.handleMessage(msg);
37 int what = msg.what;
38 Toast.makeText(HandlerThreadActivity.this, "hahah" + what , Toast.LENGTH_SHORT).show();
39 }
40 };
41
42 //通過以上三步我們就成功創建HandlerThread。通過handler發送消息,就會在子線程中執行。
43 //如果想讓HandlerThread退出,則需要調用handlerThread.quit();。
44
45 //創建一個線程發送消息
46 new ChildThread().start();
47 }
48
49 class ChildThread extends Thread {
50 @Override
51 public void run() {
52 super.run();
53 try {
54 //在子線程中可以做一些耗時的工作
55 sleep( 1000 );
56 Message message = handler.obtainMessage();
57 message.what = 3 ;
58 handler.sendMessage(message);
59 }catch ( Exception e ){
60
61 }
62 }
63 }
64 }
實例2
1 package app.com.myapplication;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.os.Handler;
6 import android.os.HandlerThread;
7 import android.os.Looper;
8 import android.os.Message;
9 import android.widget.Toast;
10
11 /**
12 * Created by ${zyj} on 2016/2/15.
13 * HandlerThread繼承於Thread,所以它本質就是個Thread。
14 * 與普通Thread的差別就在於,主要的作用是建立了一個線程,並且創立了消息隊列,有來自己的looper,可以讓我們在自己的線程中分發和處理消息。
15 */
16 public class HandlerThreadActivity2 extends Activity {
17
18
19 private MHandlerThread mHandlerThread ;
20 private Handler handler ;
21
22 @Override
23 protected void onCreate(Bundle savedInstanceState) {
24 super.onCreate(savedInstanceState);
25
26 // 1:創建一個HandlerThread,即創建了一個包含Looper的線程。
27 mHandlerThread = new MHandlerThread( "thisName" ) ;
28 mHandlerThread.start(); //創建HandlerThread後一定要記得start()
29
30 //2:獲取HandlerThread的Looper
31 Looper looper = mHandlerThread.getLooper();
32
33 //3:創建Handler,通過Looper初始化
34 //特別要注意的是handler與誰相關,不是看handler寫在什麼位置,而是看handler的looper跟什麼相關
35 handler = new Handler(looper) {
36
37 @Override
38 public void handleMessage(Message msg) {
39 super.handleMessage(msg);
40 int what = msg.what;
41 Toast.makeText(HandlerThreadActivity2.this, "hahah" + what , Toast.LENGTH_SHORT).show();
42 }
43 };
44
45 handler.sendEmptyMessage(2) ;
46
47 }
48
49 class MHandlerThread extends HandlerThread {
50 public MHandlerThread(String name) {
51 super(name);
52 }
53 }
54 }
注意:寫 MHandlerThread 的時候,最好寫上線程的優選級
1 class MHandlerThread extends HandlerThread {
2 public MHandlerThread(String name ) {
3 //設置程序的優先級(標准後台程序)
4 super(name , Process.THREAD_PRIORITY_BACKGROUND);
5 }
6 }
高靈活低耦合Adapter快速開發攻略,耦合adapter攻略
高靈活低耦合Adapter快速開發攻略,耦合adapter攻略Android開發中經常需要使用Adapter。 傳統方法是自定義一個Adapter並繼承AndroidSD
我的android學習經歷8,android學習經歷8
我的android學習經歷8,android學習經歷8android簽名打包apk文件 1.在要打包的項目上右擊打開Android Tools,然後打開Export An
Android 左右側滑示例
Android 左右側滑示例 Android 左右側滑示例。可以自已設置側滑的效果,我在這裡實現是左右都可以。側滑出來的界面可以啟動activity,或者加載view。側
學習Android從0開始之基礎篇(2)-AndroidMainfest.xml文件詳解
學習Android從0開始之基礎篇(2)-AndroidMainfest.xml文件詳解 AndroidMainfest.xml文件詳解 一、關於AndroidMani