Android Handler、Loop 的简单使用
生活随笔
收集整理的這篇文章主要介紹了
Android Handler、Loop 的简单使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、子線程和子線程之間的通信
package lib.com.myapplication;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {private Handler handler1 ;private Handler handler2 ;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);new MyThread1().start();new MyThread2().start();}class MyThread1 extends Thread {@Overridepublic void run() {super.run();Looper.prepare();handler1 = new Handler(){@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);System.out.println( "threadName--" + Thread.currentThread().getName() + "messageWhat-"+ msg.what );}};try {sleep( 3000 );} catch (InterruptedException e) {e.printStackTrace();}handler2.sendEmptyMessage( 2 ) ;Looper.loop();}}class MyThread2 extends Thread {@Overridepublic void run() {super.run();Looper.prepare();handler2 = new Handler(){@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);System.out.println( "threadName--" + Thread.currentThread().getName() + "messageWhat-"+ msg.what );}};try {sleep( 4000 );} catch (InterruptedException e) {e.printStackTrace();}handler1.sendEmptyMessage( 5 ) ;Looper.loop();}}
}
注意:
1、調用Looper類的?prepare()?方法可以為當前線程創建一個消息循環,調用loop()?方法使之處理信息,直到循環結束。
2、Handler有幾個構造重載,如果構造時不提供Looper類對象參數,會獲取當前線程的Looper對象,即將當前線程的消息循環作為Handler關聯的消息循環。
3、消息處理機制中,消息存放在一個消息隊列中,而線程圍繞這個隊列進入一個無限循環,直到程序退出。
如果隊列中有消息,線程就會把消息取出來,并分發給相應的Handler進行處理;
?如果隊列中沒有消息,線程就會進入空閑等待狀態,等待下一個消息的到來。
?
總結
以上是生活随笔為你收集整理的Android Handler、Loop 的简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大神博客
- 下一篇: Android 更新UI的几种方式