Android Runnable与Handler和Thread的使用,Handler构造方法弱引用实现
PS:在使用Runnable时,可能会内存泄露。Runnable是一个匿名内部类,因此它对当前Activity有一个隐式引用。如果Activity在销毁之前,任务还未完成, 那么将导致Activity的内存资源无法回收,造成内存泄漏。那么该怎么解决这种问题呢?代码如下,
static class MyRunnable implements Runnable {
@Override
public void run() {
//执行任务
}
}
使用 静态内部类,避免了Activity的内存资源泄漏。
1、Runnable对象
Runnable runnable = new Runnable() {@Overridepublic void run() {Log.i("Lgq","runnable111"+Thread.currentThread().getName());textView.setText("aaaaaaaaaaa");}
};
2、Handler调用Runnable对象
Handler handler =new Handler();
handler.post(runnable);
03-22 15:21:49.950 9126-9126/com.tianxin.httpheader I/Lgq: runnable111main
3、Thread调用Runnable对象
Thread thread = new Thread(runnable,"abcc");
thread.start();
03-22 15:21:49.936 9126-9222/com.tianxin.httpheader I/Lgq: runnable111abcc
4、handler构造方法弱引用实现
private Handler mHandler;
mHandler = new InnerHandler(this);
private static class InnerHandler extends Handler {private WeakReference<DetectActivity> mWeakReference;public InnerHandler(DetectActivity activity) {super();this.mWeakReference = new WeakReference<>(activity);}@Overridepublic void handleMessage(Message msg) {if (mWeakReference == null || mWeakReference.get() == null) {return;}DetectActivity activity = mWeakReference.get();if (activity == null) {return;}if (msg == null) {return;}switch (msg.what) {case MSG_INITVIEW:activity.start();break;default:break;}}
}
Android Runnable与Handler和Thread的使用,Handler构造方法弱引用实现相关推荐
- 【Android 内存优化】Bitmap 内存缓存 ( Bitmap 内存复用 | 弱引用 | 引用队列 | 针对不同 Android 版本开发不同的 Bitmap 复用策略 | 工具类代码 )
文章目录 一.Bitmap 复用池 二.弱引用 Bitmap 内存释放 三.从 Bitmap 复用池中获取对应可以被复用的 Bitmap 对象 1.Android 2.3.3(API 级别 10)及以 ...
- 在Android中使用Handler和Thread线程执行后台操作
在 Android中使用Handler和Thread线程执行后台操作 对于线程的控制,我们将介绍一个 Handler类,使用该类可以对运行在不同线程中的多个任务进行排队,并使用Message和Runn ...
- Android --- java.lang.RuntimeException: Can‘t create handler inside thread that has not called Loop
报错信息如下: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.pr ...
- Android开发之多线程编程Thread和Runnable使用
Android开发之多线程编程Thread和Runnable使用 Android可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:前者只要继承了Thread类同时覆写了 ...
- 【转】Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask
方法一:(java习惯,在android不推荐使用) 刚刚开始接触android线程编程的时候,习惯好像java一样,试图用下面的代码解决问题 new Thread( new Runnable() { ...
- android 结束if循环_Android 消息机制(Handler + MessageQueue + Looper)
Author:CrazyWah Date:2018.03.26 CopyRight:http://crazywah.com 禁止搬运!!!禁止搬运!!!禁止搬运!!! Android的消息机制主要由H ...
- Android多线程源码学习笔记一:handler、looper、message、messageQueue
最近在学习Android多线程相关知识的源码,现在把自己的笔记整理一下,写出来加深印象. Android多线程通讯的核心是handler.looper.message.messageQueue,这篇文 ...
- Android的线程使用来更新UI----Thread、Handler、Looper、Time...
为什么80%的码农都做不了架构师?>>> 方法一:(java习惯,在android不推荐使用) 刚刚开始接触android线程编程的时候,习惯好像java一样,试图用下面的代码 ...
- Android进程框架:线程通信的桥梁Handler
关于作者 郭孝星,程序员,吉他手,主要从事Android平台基础架构方面的工作,欢迎交流技术方面的问题,可以去我的Github提issue或者发邮件至guoxiaoxingse@163.com与我交流 ...
最新文章
- mysql 5.7 xbackup_CentOS 7 下 MySQL 5.7 配置 Percona Xtrabackup
- PHP 如何获取二维数组中某个key的集合(高性能查找)
- Non-interger Area 分类讨论 奇偶 取模 牛客练习赛95
- 1971 John McCarthy--人工智能之父和LISP语言的发明人(ZT)
- CAR-T治疗的临床前药理学模型
- 如何破解Synplify Pro 9.6.2? (SOC) (Synplify)
- GMAT英语语法:量词及一些单复数问题详解。附相关错句改正
- 插入,冒泡,选择,快速,归并,堆排序,java 泛型实现
- Java基础编程练习题
- php 根据ip判断是否中国,PHP判断IP是中国IP还是外国IP
- 计算机建模步骤,cad建模步骤
- 涨停前常见的K线形态
- App中WebView网页加载优化实战干货
- MarkDown表格合并
- 《人月神话》(P10)必须有文档
- 一般游戏原画制作的步骤是什么
- Flutter模拟器运行显示不正常问题(夜游神安卓模拟器)
- Centos7安装后不显示IP地址,具体解决办法
- 解决在vue中切换图片,gif格式的图片停在最后一帧的问题
- SFC /SCANNOW发现损坏文件应对方法参考