Handler
w366549434
一个基本自由的android开发者
展开
-
在Android开发中不要再用new Thread的方式开启线程啦
正如标题所言,如果直接使用new Thread的方法创建一个线程,很大概率就会导致内存泄漏。因为一个内部类始终会持有外部类的引用,如果这个内部类恰好是一个Thread对象,它拿着外部类的引用跑在另一个线程中,这就很容易导致外部类在应该释放的节点无法被释放,从而导致内存泄漏。为了杜绝这类情况,还是建议大家不要再代码中直接使用new Thread这种粗暴的方式创建线程,而是使用HandlerThread来管理子线程,亦或者是自己写一个线程池控制类来管理好各个子线程。可以参见我之前的博客->Andr原创 2020-06-22 11:55:45 · 5770 阅读 · 0 评论 -
Android中的线程工具类学习:AsyncTask、HandlerThread、IntentService
首先是AsyncTask这是一个用于异步处理数据的线程操作类。由于Android中存在UI线程的概念,只有在UI线程中才能对View(肉眼可见的地方)进行修改和调整。UI线程中是不能做一些耗时地操作的,比如说访问网络(http请求)、从SD卡读写数据(I/O操作)亦或者是比较复杂的数据运算,这些都是不能放在UI线程中进行的(会导致ANR异常)。为了解决这个问题,Android系统提供了这个异步操作类。(以下是部分代码)public abstract class AsyncTask<Par原创 2020-05-25 21:04:00 · 2199 阅读 · 1 评论 -
Android Handler知识学习记录(一)Handler的postDelayed和postAtTime
//Handler中的源码 public final boolean postDelayed(Runnable r, long delayMillis) { return sendMessageDelayed(getPostMessage(r), delayMillis); } public final boolean sendMessa...原创 2020-03-18 15:04:59 · 2613 阅读 · 0 评论 -
Android中优雅的线程切换写法(二)
Android中优雅的线程切换写法(一),接上回继续写。在实现延迟执行任务之后,再实现移除延迟任务。这个就需要先做一个栈,把所有的延迟任务put到这个栈中,并以一个唯一tag作为标记。等到需要移除的时候,通过移除这个tag标记的Runnable就行了。以上是实现的基本思路,那么具体做法如下:1、首先对原有的ThreadUtil类进行修改,增加一个Map集合作为“任务栈”保存所有的延迟任务...原创 2019-12-28 21:35:27 · 673 阅读 · 0 评论 -
Android中优雅的线程切换写法(一)
最近我发现,项目中的Handler实例越来越多了,且非常的杂乱。甚至有的时候,只是为了一个定时任务、延迟任务,便new了一个新的Handler实例。毫无疑问,这样的写法必然会导致最后的代码冗余极高,且极难维护。 由此我想通过一个全局的Handler来实现优化,防止代码冗余。以下是我的做法。 首先定义一个ThreadUtil类public clas...原创 2019-12-23 21:23:57 · 1103 阅读 · 0 评论