1. Handel:主线程中定义Handler,子线程发消息,通知Handler完成UI更新,Handler对象必须定义在主线程中,如果是多个类直接互相调用,就不是很方便,需要传递content对象或通过接口调用;但是这个方式要特别注意处理内存泄漏问题

2.runOnUiThread:runOnUiThread(new Runnable()){}  用Activity对象的runOnUiThread方法更新,在子线程中通过runOnUiThread()方法更新UI,使用方便

3.View.post(Runnable r)  比较建议的一种 特别是适用于view的更新

4.AsyncTask:主线程中实例化对象 异步线程处理

 

 

使用handle通信和使用view.post的区别是:view.post也是往主线程发消息,只是发消息要看view的状态,如果view已经被关联到window的话,直接通过handler发送,如果不是的话,则把消息添加到RunQueue.mActions中,到下次view绘制时再把mAction中的消息发到主线程消息队列,这里如果aAction中的runnable对象没有被及时发出去的话,回导致内存泄露,以为runnable常常作为匿名内部类,会持有对外部类的引用.从使用上看在有view引用变量的情况下,使用view.post方便,不需要自己去定义一个handler,定义handler一不小心就会引起内存泄露。



链接:https://www.jianshu.com/p/4265698b0577
 

更多相关文章

  1. 自定义Spinner下拉列表
  2. 三、数据库入门和listview的基本使用
  3. OkHttp学习系列二:谈谈Android中使用的坑
  4. Android(安卓)AppWidget核心之AppWidgetService
  5. Android手机开发:网络连接-打开Url下载信息
  6. Launcher研究资料收集(4)--Appliction
  7. WebKit 分析–for android - Braincol - 博客园
  8. AIDL跨进程通信
  9. Android(安卓)Activity 图形化生成简读

随机推荐

  1. Myeclipse出现错误:Errors running builde
  2. Android之ListView的简单用法
  3. Unable to resolve target 'android-i'
  4. AndroidStudio上面最好用的插件
  5. Android(安卓)报错 “程序包R不存在...!”
  6. 【Android】【opencv】实现摄像头拍照和
  7. android 两个视频同时播放音频冲突的解决
  8. android 手势识别代码
  9. Android(安卓)studio 中与本地 html 页面
  10. 使用 SQLiteDatabase 操作 SQLite 数据库