代码如下:
public class MainActivity extends Activity {
private static final String TAG = "MainThread";
private Timer timer;
private TimerTask timerTask;
private Handler mMainHandle,mChildHandle;
private int i=0;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
timer = new Timer();
timerTask = new MyTimerTask();
mMainHandle = new Handler(){
public void handleMessage(Message msg) {
Log.e("mainhandle", i+"");
}
};
new ChildThread().start();
timer.schedule(timerTask, 0, 5000);
}
public class MyTimerTask extends TimerTask{
public void run() {
if(mChildHandle!=null){
Message childMsg = mChildHandle.obtainMessage();
mChildHandle.sendMessage(childMsg);
Log.e("thread", i+"");
}
}
}
public void onDestroy(){
Log.i(TAG,"stop looping the child threads message queue");
mChildHandle.getLooper().quit();
}
class ChildThread extends Thread{
public void run(){
Looper.prepare();
mChildHandle = new Handler(){
public void handleMessage(Message msg)
{
Log.i("child", "11111111");
i++;
Message toMain = mMainHandle.obtainMessage();
toMain.obj = this.getLooper().getThread().getName()+ i;
mMainHandle.sendMessage(toMain);
Log.i("i=",i+"");
}
};
Looper.loop();
}
}
}
LOG如下:
08-16 08:08:12.936: ERROR/thread(235): 0
08-16 08:08:12.939: INFO/child(235): 11111111
08-16 08:08:12.939: INFO/i=(235): 1
08-16 08:08:12.939: ERROR/mainhandle(235): 1
08-16 08:08:13.239: DEBUG/dalvikvm(105): GC freed 2498 objects / 144872 bytes in 81ms
08-16 08:08:17.937: ERROR/thread(235): 1
08-16 08:08:17.940: INFO/child(235): 11111111
08-16 08:08:17.940: INFO/i=(235): 2
08-16 08:08:17.940: ERROR/mainhandle(235): 2
08-16 08:08:22.939: ERROR/thread(235): 2
08-16 08:08:22.939: INFO/child(235): 11111111
08-16 08:08:22.939: INFO/i=(235): 3
08-16 08:08:22.939: ERROR/mainhandle(235): 3
08-16 08:08:27.941: ERROR/thread(235): 3
08-16 08:08:27.941: INFO/child(235): 11111111
08-16 08:08:27.941: INFO/i=(235): 4
08-16 08:08:27.941: ERROR/mainhandle(235): 4
08-16 08:08:32.941: ERROR/thread(235): 4
08-16 08:08:32.941: INFO/child(235): 11111111
08-16 08:08:32.941: INFO/i=(235): 5
08-16 08:08:32.941: ERROR/mainhandle(235): 5
08-16 08:08:37.943: ERROR/thread(235): 5
08-16 08:08:37.943: INFO/child(235): 11111111
08-16 08:08:37.943: INFO/i=(235): 6
08-16 08:08:37.943: ERROR/mainhandle(235): 6
08-16 08:08:42.944: ERROR/thread(235): 6
。。。。。。
以上代码可以看出其执行的顺序。
转自http://www.eoeandroid.com/thread-29406-1-1.html
分享到:
相关推荐
在Android应用开发中,线程(Thread)和Handler是两个至关重要的概念,它们共同负责处理应用程序的多任务执行和UI更新。本资料“Android-Handle-Thread....通过学习和实践,开发者能够更自如地应对复杂的多线程场景。
`Handle` 和 `Runnable` 是Android多线程编程中的重要概念,它们允许开发者在不同的线程之间同步数据和执行任务。`Handle` 提供了一种消息处理机制,而`Runnable` 是一个接口,定义了代码块的执行逻辑。接下来,我们...
在Android开发中,多线程和异步处理是至关重要的技术,特别是在处理耗时操作如网络请求、数据加载等场景。Handler是Android提供的一种机制,用于在不同的线程间通信,特别是主线程(UI线程)与工作线程之间。在...
在Android开发中,消息处理是应用中不可或缺的一部分,主要用于线程间通信,特别是UI线程与后台线程之间的数据同步。`handle_message_obtainMessage`这个主题涉及到的是Android中的Handler机制,它允许开发者在不同...
因为Android不允许多线程直接修改UI,所以我们通常在工作线程中处理耗时操作,然后通过`Handler`向主线程发送消息,主线程的`Handler`收到消息后更新UI。 总结起来,线程和消息处理是Android应用并发编程的基础,...
总结来说,Android Handler机制是通过主线程的Looper不断检查MessageQueue,取出消息并分发给对应的Handler来实现线程间的通信。这个过程涉及到多个关键组件的协作,包括ActivityThread、Handler、MessageQueue、...