WEB开发网
开发学院手机开发Android 开发 深入理解Android消息处理系统——Looper、Handler... 阅读

深入理解Android消息处理系统——Looper、Handler、Thread

 2010-10-14 06:30:00 来源:本站整理   
核心提示:那么另外一个线程怎样把消息放入主线程的消息队列呢?答案是通过Handle对象,只要Handler对象以主线程的Looper创建,深入理解Android消息处理系统——Looper、Handler、Thread(2),那么调用 Handler的sendMessage等接口,将会把消息放入队列都将是放入主线程的消息队列,请

那么另外一个线程怎样把消息放入主线程的消息队列呢?答案是通过Handle对象,只要Handler对象以主线程的Looper创建,那么调用 Handler的sendMessage等接口,将会把消息放入队列都将是放入主线程的消息队列。并且将会在Handler主线程中调用该handler 的handleMessage接口来处理消息。

这里面涉及到线程同步问题,请先参考如下例子来理解Handler对象的线程模型:

1、首先创建MyHandler工程。

2、在MyHandler.java中加入如下的代码:

package com.simon;

import android.app.Activity;

import android.os.Bundle;

import android.os.Message;

import android.util.Log;

import android.os.Handler;

public class MyHandler extends Activity {

static final String TAG = "Handler";

Handler h = new Handler(){

public void handleMessage (Message msg)

{

switch(msg.what)

{

case HANDLER_TEST:

Log.d(TAG, "The handler thread id = " + Thread.currentThread().getId() + " ");

break;

}

}

};

static final int HANDLER_TEST = 1;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

Log.d(TAG, "The main thread id = " + Thread.currentThread().getId() + " ");

new myThread().start();

setContentView(R.layout.main);

}

class myThread extends Thread

{

public void run()

{

Message msg = new Message();

msg.what = HANDLER_TEST;

h.sendMessage(msg);

Log.d(TAG, "The worker thread id = " + Thread.currentThread().getId() + " ");

}

}

}

在这个例子中我们主要是打印,这种处理机制各个模块的所处的线程情况。如下是我的机器运行结果:

09-10 23:40:51.478: DEBUG/Handler(302): The main thread id = 1

Tags:深入 理解 Android

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接