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构造方法弱引用实现相关推荐

  1. 【Android 内存优化】Bitmap 内存缓存 ( Bitmap 内存复用 | 弱引用 | 引用队列 | 针对不同 Android 版本开发不同的 Bitmap 复用策略 | 工具类代码 )

    文章目录 一.Bitmap 复用池 二.弱引用 Bitmap 内存释放 三.从 Bitmap 复用池中获取对应可以被复用的 Bitmap 对象 1.Android 2.3.3(API 级别 10)及以 ...

  2. 在Android中使用Handler和Thread线程执行后台操作

    在 Android中使用Handler和Thread线程执行后台操作 对于线程的控制,我们将介绍一个 Handler类,使用该类可以对运行在不同线程中的多个任务进行排队,并使用Message和Runn ...

  3. 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 ...

  4. Android开发之多线程编程Thread和Runnable使用

    Android开发之多线程编程Thread和Runnable使用 Android可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:前者只要继承了Thread类同时覆写了 ...

  5. 【转】Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask

    方法一:(java习惯,在android不推荐使用) 刚刚开始接触android线程编程的时候,习惯好像java一样,试图用下面的代码解决问题 new Thread( new Runnable() { ...

  6. android 结束if循环_Android 消息机制(Handler + MessageQueue + Looper)

    Author:CrazyWah Date:2018.03.26 CopyRight:http://crazywah.com 禁止搬运!!!禁止搬运!!!禁止搬运!!! Android的消息机制主要由H ...

  7. Android多线程源码学习笔记一:handler、looper、message、messageQueue

    最近在学习Android多线程相关知识的源码,现在把自己的笔记整理一下,写出来加深印象. Android多线程通讯的核心是handler.looper.message.messageQueue,这篇文 ...

  8. Android的线程使用来更新UI----Thread、Handler、Looper、Time...

    为什么80%的码农都做不了架构师?>>>    方法一:(java习惯,在android不推荐使用) 刚刚开始接触android线程编程的时候,习惯好像java一样,试图用下面的代码 ...

  9. Android进程框架:线程通信的桥梁Handler

    关于作者 郭孝星,程序员,吉他手,主要从事Android平台基础架构方面的工作,欢迎交流技术方面的问题,可以去我的Github提issue或者发邮件至guoxiaoxingse@163.com与我交流 ...

最新文章

  1. mysql 5.7 xbackup_CentOS 7 下 MySQL 5.7 配置 Percona Xtrabackup
  2. PHP 如何获取二维数组中某个key的集合(高性能查找)
  3. Non-interger Area 分类讨论 奇偶 取模 牛客练习赛95
  4. 1971 John McCarthy--人工智能之父和LISP语言的发明人(ZT)
  5. CAR-T治疗的临床前药理学模型
  6. 如何破解Synplify Pro 9.6.2? (SOC) (Synplify)
  7. GMAT英语语法:量词及一些单复数问题详解。附相关错句改正
  8. 插入,冒泡,选择,快速,归并,堆排序,java 泛型实现
  9. Java基础编程练习题
  10. php 根据ip判断是否中国,PHP判断IP是中国IP还是外国IP
  11. 计算机建模步骤,cad建模步骤
  12. 涨停前常见的K线形态
  13. App中WebView网页加载优化实战干货
  14. MarkDown表格合并
  15. 《人月神话》(P10)必须有文档
  16. 一般游戏原画制作的步骤是什么
  17. Flutter模拟器运行显示不正常问题(夜游神安卓模拟器)
  18. Centos7安装后不显示IP地址,具体解决办法
  19. 解决在vue中切换图片,gif格式的图片停在最后一帧的问题
  20. SFC /SCANNOW发现损坏文件应对方法参考

热门文章

  1. [html] H5如何与APP交互?有哪些方式?
  2. 前端学习(2891):vue工程化配置
  3. 前端学习(2885):如何短时间内实现v-for 搭建环境 业务模块设计
  4. [vue] 有使用过vue吗?说说你对vue的理解
  5. 工作278:控制数据从字典表获取
  6. 前端学习(2682):重读vue电商网站2之前台启动
  7. 前端学习(1821):前端面试题之封装函数之去重
  8. 第三十二期:MySQL常见的图形化工具
  9. 第十二期:面试官问你什么是消息队列?把这篇甩给他!
  10. Qt 调用MATLAB引擎混合编程