Android学习之路——2.Handler常用的使用方法
所谓的常用的使用方法只是我自己这么认为的。嘻嘻(*^__^*) 好直接上代码。
package zhenz.exercise;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.HandlerThread;import android.os.Looper;import android.os.Message;import android.util.Log;public class ExerciseActivity extends Activity {/** * 缺省构造方法 */private Handler mHandler_1 = new Handler();/** * 继承Handler,实现自己的handlerMessage()方法 */private Handler mHandler_2 = new Handler() {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case 0:Log.i("mHandler_2", "mHandler_2 ,the current Thread's id is:" + Thread.currentThread().getId());break;case 1:Log.i("mHandler_2", "mHandler_2 ,the current Thread's id is:" + Thread.currentThread().getId());break;}}};/** * 含Handler.Callback参数的构造方法 */private Handler mHandler_3 = new Handler(new Handler.Callback() {@Overridepublic boolean handleMessage(Message msg) {Log.i("mHandler_3", "mHandler_3 ,the current Thread's id is:" + Thread.currentThread().getId());return false;}});/** * Looper和handlerThread为下面在主线程外使用Handler做准备。 */private Looper mLooper;private HandlerThread handlerThread = new HandlerThread("HandlerThread");{handlerThread.start();//一定要先调用start方法mLooper = handlerThread.getLooper();}/** * 含Looper参数的构造方法 */private Handler mHandler_4 = new Handler( mLooper);/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);Log.i("Main", "Main,the current Thread's id is:" + Thread.currentThread().getId());// Handler中其他的post方法类似。boolean done = mHandler_1.postAtTime(new Runnable() {@Overridepublic void run() {Log.i("mHandler_1", "mHandler_1 ,the current Thread's id is:" + Thread.currentThread().getId());}}, 1000L);if (done) {//一Log.i("mHandler_1", "Runnable was successfully placed in to the message queue in the mHandler_1");}// Handler中其他的sendMessage方法类似mHandler_2.sendEmptyMessageDelayed(0, 1000L);// 不同线程通过mHandler_2和主线程通信Thread thread = new Thread(new Runnable() {@Overridepublic void run() {Log.i("thread", "thread ,the current Thread's id is:" + Thread.currentThread().getId());mHandler_2.sendEmptyMessageDelayed(1, 1000L);}});thread.start();// 使用Message来传递数据Message message = Message.obtain(null, 1, 2, 3, "Message 1");message.setTarget(mHandler_3);message.sendToTarget();// Handler中其他的post方法类似,不在主线程中处理事物boolean can = mHandler_4.postAtTime(new Runnable() {@Overridepublic void run() {//二Log.i("mHandler_4", "mHandler_4 ,the current Thread's id is:" + Thread.currentThread().getId());}}, 1000L);if (can) {//三Log.i("mHandler_4", "Runnable was successfully placed in to the message queue in the mHandler_4");}}}
由上图的信息可以知道程序处理消息的顺序(有些设置了延时,消息处理的顺序应该是基于时间,具体的我也不太懂啦)以及消息是在哪个线程处理的。