package org.mobiletrain.www.aday20_demo01_handlerlooper;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Looper.prepareMainLooper();
// Looper.loop();
Handler handler=new Handler();
/**
* 1. 生成Message new|从消息池中取出
*
* 2. 将Handler添加到Message对象中 m.target = h;
*/
Message msg=handler.obtainMessage();
msg.what=100;
/**
* 1. 将消息添加到消息队列中 queue.enqueueMessage(msg,)
*
* 2. msg.target = this;
*
* handleMessage(msg);
*/
handler.sendMessage(msg);
/**
* 1. 根据 Runnable 对象生成 Message
* Message m = Message.obtain();
* m.callback = r;
*
* 2. 将Message 放入消息对象
*
* 3. Looper 中调用 Handler.handleCallback(msg);
* message.callback.run();
*/
handler.post(new Runnable() {
@Override
public void run() {
//UI
}
});
}
class MainThread extends Thread{
@Override
public void run() {
super.run();
/**
* 1. 初始换Looper对象 new Looper(quitAllowed)
*
* 2. 创建 MessageQueue mQueue = new MessageQueue(quitAllowed);
*
* 3. 每个线程中只有1个Looper对象 Only one Looper may be created per thread
*
* 4. 当线程有Looper对象,这个线程就可以叫 LooperTread
*/
Looper.prepare();
/**
* 1. 获得当前线程中的Looper对象 mLooper = Looper.myLooper();
*
* 2. 获得当前线程中的消息队列 mQueue = mLooper.mQueue;
*
*/
Handler handler=new Handler();
/**
* 1. 拿到当前线程的Looper对象 Looper me = myLooper();
*
* 2. 拿到当前线程的MessageQueue对象 MessageQueue queue = me.mQueue
*
* 3. 死循环 for (;;) {}
*
* 4. 取出消息队列中的消息,当消息队列中无消息时会阻塞线程 Message msg = queue.next(); // might block
*
* 5. 取出消息对象中的Handler对象,
* 调用Handler对象的dispatchMessage()处理当前消息
* msg.target.dispatchMessage(msg);
* Handler target handleMessage(msg);
*
* 6. 处理完消息,把消息放入消息池 msg.recycleUnchecked();
*/
Looper.loop();
}
}
}

浙公网安备 33010602011771号