原理:
Handler 、 Looper 、Message 这三个是Android异步消息处理线程相关的概念。异步消息处理线程启动后会进入一个无限的循环体之中,每次循环,从其内部的消息队列中取出一个消息,然后回调相应的消息处理函数,执行完成一个消息后则继续循环。若消息队列为空,线程则会阻塞等待。
Looper创建一个MessageQueue,然后进入一个无限循环体不断从该MessageQueue中读取消息,而消息的创建者就是一个或多个Handler 。
使用:
private Handler mHandler = newHandler()
{
public void handleMessage(android.os.Message msg)
{
switch(msg.what)
{
case value:
break;
default:
break;
}
};
};
mHandler.sendMessage();
2,
private Handler mHandler =new Handler();
mHandler.post(newRunnable()
{
@Override
public void run()
{
Log.e("TAG", Thread.currentThread().getName());
mtv.setText("test");
}
});
注意:
1, 避免内存泄漏
a) 内部类隐式包含外部类的引用
解决方法:
1,改为静态内部类。
2,或者手动管理线程及时结束以释放对象
b) 结果执行体中包含有View类,View会持有外部Context。
解决方法:
使用弱连接
2, Handler事实上提供了一个异步线程处理但方案,可以放在其他地方使用
参考:
https://my.oschina.net/rengwuxian/blog/181449
http://blog.csdn.net/feelang/article/details/39059705