主要内容:
1 Handler与线程
2 Bundle的用法
3 在新线程当中处理消息的方法
Handler的post调用与Activity处于统一线程。要想使用另外的线程来处理,可以通过HandlerThread类,或者重现编写一个继承Handler类的子类。
1 Handler与线程
2 Bundle的用法
3 在新线程当中处理消息的方法
Handler的post调用与Activity处于统一线程。要想使用另外的线程来处理,可以通过HandlerThread类,或者重现编写一个继承Handler类的子类。
Bundle: 与Map类似存放键值对,特殊在键的类型都是String,值的类型也是有限的。可以使用Bundle在线程中传递数据。
package dj.handler;
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 HandlerTestActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//打印当前线程的id
Log.d("TAG", "Activity-->" + Thread.currentThread().getId());
//生成一个HandlerThread对象,实现了使用Looper来处理消息队列的功能,这个类由Android应用程序框架提供
HandlerThread handlerThread = new HandlerThread("handler_thread");//HandlerThread提供循环处理消息的机制
//在使用HandlerThread的getLooper之间,必须先执行start方法
handlerThread.start();
MyHandler myHandler = new MyHandler(handlerThread.getLooper());
Message msg = myHandler.obtainMessage();
//将msg发送到目标对象,就是生成该msg的Handler对象
Bundle b = new Bundle();//使用Bundle来传递数据
b.putInt("age", 20);
b.putString("name", "John");
msg.setData(b);
msg.sendToTarget();
}
class MyHandler extends Handler
{
public MyHandler(){}
public MyHandler(Looper looper){
//Handler使用Looper这个线程来处理消息队列,即将Handler绑定到另外一个线程中来取消息对象
super(looper);
}
@Override
public void handleMessage(Message msg)
{
Bundle b = msg.getData();
int age= b.getInt("age");
String name = b.getString("name");
Log.d("TAG", "age:" + age + ", name:" + name);
Log.d("TAG", "handler-->" + Thread.currentThread().getId());
Log.d("TAG", "handleMessage");
}
}
}