关闭

handler学习

标签: 通信线程Handler 内存
151人阅读 评论(0) 收藏 举报

一、使用handler的主要目的
handle主要是为了解决线程间通信问题
二、工作过程
    Handler 先进先出原则。
  1、Looper: 一个线程可以产生一个Looper对象(也只能一个),由它来管理此线程里的Message Queue(消息队列)。
主线程会自动创建 Looper并执行  具体可以看ActivityThread
public static void main(String[] args) {  
Looper.prepareMainLooper();    
ActivityThread thread = new ActivityThread();    
thread.attach(false); 
Looper.loop();    
 throw new RuntimeException("Main thread loop unexpectedly exited");
}


  2、Handler: 可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper从Message Queue取出)所送来        的消息。
  3、Message Queue(消息队列):用来存放线程放入的消息。 
        4、Message 消息
  5、线程:UI thread就是main thread,而Android启动程序时会替它建立一个Message Queue。




三、发送消息
     2种生成消息的方式  
     Message message = Message.obtain(); //获取消息池里的消息   节省资源  推荐
     Message message = new Message();     //自己创建            耗资源    不推荐


    用handle执行Runnable
    post(Runnable)                   
    postAtTime(Runnable,long)
    postDelayed(Runnable long)
    
    发送消息
    sendEmptyMessage(int what)
    sendMessage(Message)
    sendMessageAtTime(Message,long)
    sendMessageDelayed(Message,long)


四、内存泄漏
原因:内部类持有外部类的引用
解决办法
 将Handler声明为静态类(静态类不持有外部类的对象)
 弱引用外部类对象
 关闭Activity时把消息清空


 列子:
 private static class MyHandler extends Handler {
WeakReference<LegendSettingUpdateActivity> mWeakReference;
public MyHandler(LegendSettingUpdateActivity activity) {
mWeakReference = new WeakReference<LegendSettingUpdateActivity>(activity);
}

@Override
public void handleMessage(Message msg) {
final LegendSettingUpdateActivity activity = mWeakReference.get();
if (activity != null) {
if (msg.what == 1) {
Intent mIntent = new Intent();
mIntent.putExtra("value", endvalue);
activity.setResult(0, mIntent);
activity.finish();

}

if (msg.what == 2) {

pDailog.dismiss();
Toast.makeText(activity, "区间值不合理,请检查", Toast.LENGTH_SHORT).show();
} else {
activity.finish();
}
}
}
}



@Override
protected void onDestroy() {
super.onDestroy();
if (pDailog != null && pDailog.isShowing()) {
pDailog.cancel();
}
mHandler.removeCallbacksAndMessages(null);    //清空消息
}

0
0
查看评论

Handler机制从入门到放弃(二)

从注释看起Hander的源码只有不到800行,而且大多数代码相对来说还是比较好理解的,尤其是相对于其他更加接近底层的代码来说,在看源码时候有一点挺重要的就是不要忽略注释的作用,Handler类开头有这么几行注释: <p>There are two main uses for a Hand...
  • Wei_Smile
  • Wei_Smile
  • 2016-10-31 10:09
  • 738

Android学习笔记:关于Handler的详解(二)

4.handler移除消息 5.handler移除消息的内容 6.handler消息通信机制的原理 7.如何实现一个与子线程相关的handler 8. Android中更新ui的几种方式。
  • u012156341
  • u012156341
  • 2016-02-29 09:49
  • 587

android中利用handler改变textView的内容

先写一个TextView 和Button TextView android:text="TextView" android:layout_width="wrap_content" android:layout_height=&q...
  • hxy19971101
  • hxy19971101
  • 2017-05-24 18:19
  • 619

Handler学习

一、Handler的定义:          主要接受子线程发送的数据, 并用此数据配合主线程更新UI.          解释: 当应用程序启动时,Android首先会开启一个主线程 ...
  • ZBJDSBJ
  • ZBJDSBJ
  • 2014-08-24 13:45
  • 237

Handler 学习

一、Handler的定义:           主要接受子线程发送的数据, 并用此数据配合主线程更新UI.         &...
  • gchqiaqia
  • gchqiaqia
  • 2012-04-27 00:29
  • 157

handler学习

使用handler是一个原因是因为  只有在 View所在的activity中才能更新 View 在自己定义的子线程中更新View就会出错例如: @Override public void run() { try { sleep(1000); textView.s...
  • u010840444
  • u010840444
  • 2015-05-21 17:40
  • 284

Android入门开发之 Handler使用

Android提供了一个异步的消息回调机制Handler,  它负责发送消息和处理线程消息队列中的消息及runnable对象     Handler实例都是与一个线程和该线程的消息队列一起使用,一旦创建了一个新的handler实例,系统就把该实例与一个线程和...
  • newjerryj
  • newjerryj
  • 2013-04-16 00:31
  • 9964

Handler一定要在主线程实例化吗?new Handler()和new Handler(Looper.getMainLooper())的区别

一个帖子的整理 一个帖子的整理: Handler一定要在主线程实例化吗?new Handler()和new Handler(Looper.getMainLooper())的区别 如果你不带参数的实例化:Handler handler = new Handler();那么这个会默认用当前...
  • thanklife
  • thanklife
  • 2013-11-28 15:28
  • 35778

Handler的基本用法和原理简介

介绍      在平时的安卓开发过程中,Handler一定不少见,Handler是Android消息机制的上层接口,这使得在开发过程中只需要和Handler交互即可。很多人认为Handler的作用就是更新UI,的确没错,但是更新UI仅仅是H...
  • bingozhang24
  • bingozhang24
  • 2016-07-21 19:58
  • 2088

有关Handler机制原理的总结

Handler是线程与线程间进行通信的一套机制。        Handler是常被开发者拿来更新UI的一种消息处理机制,它的运行机制需要底层的Looper和MessageQueue的支撑。    ...
  • duanmulirui
  • duanmulirui
  • 2017-03-31 15:30
  • 912
    个人资料
    • 访问:2712次
    • 积分:103
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:3篇
    • 译文:0篇
    • 评论:0条
    文章存档