編輯:關於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攻略Android開發中經常需要使用Adapter。 傳統方法是自定義一個Adapter並繼承AndroidSD
我的android學習經歷8,android學習經歷8android簽名打包apk文件 1.在要打包的項目上右擊打開Android Tools,然後打開Export An
Android 左右側滑示例 Android 左右側滑示例。可以自已設置側滑的效果,我在這裡實現是左右都可以。側滑出來的界面可以啟動activity,或者加載view。側
學習Android從0開始之基礎篇(2)-AndroidMainfest.xml文件詳解 AndroidMainfest.xml文件詳解 一、關於AndroidMani