分享

android学习笔记之Handler使用

 张跃的Java 2012-04-08
handler 开启新线程 处理消息机制

默认情况下 使用handler.post(Thread对象)将线程对象加入到线程队列时 thread对象运行是和当前activity在同一个线程中执行操作的
而android大部分功能操作比较耗时 甚至可能会操作失败 的线程不可以和主线程一起完成 这就要求我们开启新的线程

需要用到looper对象 Looper类是android框架所提供的 可循环执行操作 如果我们的线程使用了looper 它便可以从消息队列中循环取出消息进行处理
当线程中无可用消息时 线程会进入休眠状态
looper对象通常不用我们自己创建 handlerThread类实现了循环处理消息的功能 用于getLooper()获取

public handlerActivity extends Activity{
@Override
protected  void onCreate(Bundle saveInstanceState)
{
super.onCrate(saveInstanceState);
setContentView(R.layout.main);
//打印当前线程的Id
System.out.print("Activity-->"+Thread.currentThread.getId());
//声明 一个handlerThread对象 该类实现了Looper循环处理消息队列的功能 这个类由android系统应用框架提供 用于获取后期需要的处理当前消息队列的
looper对象
HandlerThread hanler=new HandlerThread(“handler_thread”);
// 在使用HandlerThread的getLooper()方法之前 必须先调用该类的start() 否则looper为空
hanler.start();
//创建一个带有当前对象looper机制的handler
MyHandler myHandler=new MyHandler(handler.getLooper());
//获得当前消息队列
Message msg=myHandler.obtainMessage();
//  利用msg存储数据 如果是少量数据  可以用arg1 arg2属性存储整型数据 可以使android内存消耗最低 也可使用obj属性存储 在handMessage()中取出
msg.arg1=int值   msg.obj=String值
//而如果是大量数据时 我们要使用到Bundle对象 它是一个特殊的Map类
//声明一个Bundle对象
Bundle b=new Bundle();
//向Bundle放入数据
b.putInt("age",39);
b.putString("name",john);
//将Bundle对象放入消息中
msg.setData(b);
//向当前(即生成该msg消息对象)handler对象的消息队列发送消息 并会调用handler对象的handMessage方法 处理消息
msg.setdToTarget();
           }
}
/**
*创建一个MyHandler类 并声明两个构造函数 其中一个将looper对象作为参数 目的是当前handler可以使用looper所在的线程机制处理消息队列
*可以说是将handler对象绑定到另外一个具有looper处理机制的线程来异步处理数据
*/
class MyHandler extends Handler{
//无参构造函数声明
           public MyHandler(){
}
//带有looper对象的有参构造函数声明
public MyHandler (Looper looper)
{
             super(looper);
}

@Override
//每当我们向handler发送msg对象时 都会执行此方法 取出消息对象进行处理
public void handlerMessage(Message msg)
{
String s=(String)ms.obj;
//取出数据
Bundle b=msg.getDdata();
int age=b.getInt("age");
Sting name=b.getString("name");
//打印处理消息线程的Id
System.out.print("MessageThread----->"+Thread.currentThread().getId());
}
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多