一种基于Android的Handler防内存泄漏装置及方法制造方法及图纸

技术编号:15248376 阅读:233 留言:0更新日期:2017-05-02 09:17
本发明专利技术提供一种基于Android的Handler防内存泄漏装置,它包括:异步Runnable请求接收模块,用于接收异步任务的Runnable请求;同步模块,用于采用弱引用方法同步保存所有接收到的异步任务的Runnable请求;异步请求执行模块,用于执行异步任务的Runnable请求,判断是否有消息要发送;子线线程执行结束模块,用于在没有消息要发送时,结束子线线程;消息发送模块,用于在有消息要发送时,发送消息及消息与异步线程的弱引用关系;消息分发模块,用于存储消息及消息与异步线程的弱引用关系,并按照消息的时间顺序发送给主线程处理。本发明专利技术引入弱引用关系,确保了资源可以顺利的被垃圾回收器进行回收,子线程和主线程正常通信的前提下确保不会发生内存泄漏的问题。

Handler based memory leakage preventing device and method based on Android

The invention provides a Android based Handler anti leak memory device, it includes: asynchronous Runnable request receiving module, for receiving the asynchronous task Runnable request; synchronization module, for the weak reference method all received asynchronous task synchronization saved Runnable request; asynchronous request execution module to perform asynchronous tasks Runnable requests. To determine whether a message to be sent; sub thread end line module, not for the message to be sent when the end line thread; message sending module, used in the message to send, send messages and messages between weak references and asynchronous threads; message distribution module, used to store a reference message and message and weak the asynchronous thread, and according to the time the message is sent to the order of the main thread. The invention introduces a weak reference relation, which ensures that the resource can be recovered by the garbage collector smoothly, and the problem of memory leakage can not be guaranteed under the premise of the normal communication between the sub thread and the main thread.

【技术实现步骤摘要】

本专利技术属于Android系统安全领域,具体涉及一种基于Android的Handler防内存泄漏装置及方法。
技术介绍
在Android软件开发中或多或少会使用到多线程技术,在使用多线程技术的时候就有一个问题点的引出,那就是子线程和主线程是如何进行通信的。Android给我们提供了一个比较好用的工具Handler,通过Handler这个工具在子线程中发送消息给主线程,主线程接收到子线程的消息后,根据消息的不同类型会做不同的操作。也就是说Handler主要是通过消息机制来使得主线程和子线程进行通信。Handler这种消息机制确实解决了子线程和主线程通信的问题,但是却又一个潜在的风险,使用上稍不注意就有可能会造成内存泄漏的风险。内存泄漏会给系统带来什么问题呢。手机上内存本身是属于比较紧张的资源,内存资源是有限的,内存泄漏指的就是那些曾经使用过,现在已经没有用了的资源,并没有及时释放掉该部分内存,且该部分资源一直在内存中存在,这块区域既不能使用也不会被释放。由于这块内存一直被占用且不能被及时释放掉,所以导致其他情况下需要再次申请内存的时候却申请不到足够的内存空间就会出现系统卡顿,严重时候可能会出现应用崩溃等后果。由此可见内存泄漏给我们带来了非常不好结果。
技术实现思路
本专利技术要解决的技术问题是:提供一种基于Android的Handler防内存泄漏装置及方法,在子线程和主线程正常通信的前提下避免内存的泄漏。本专利技术为解决上述技术问题所采取的技术方案为:一种基于Android的Handler防内存泄漏装置,其特征在于:它包括:异步Runnable请求接收模块,用于接收异步任务的Runnable请求;同步模块,用于采用弱引用方法同步保存所有接收到的异步任务的Runnable请求;异步请求执行模块,用于执行异步任务的Runnable请求,判断是否有消息要发送;子线线程执行结束模块,用于在没有消息要发送时,结束子线线程;消息发送模块,用于在有消息要发送时,发送消息及消息与异步线程的弱引用关系;消息分发模块,用于存储消息及消息与异步线程的弱引用关系,并按照消息的时间顺序发送给主线程处理。按上述装置,所述的同步模块中包含双向链表,用于存储所述的异步任务的Runnable请求。按上述装置,所述的同步模块中还存储有线程的优先级,用于按照优先级移出异步任务的Runnable请求。按上述装置,所述的同步模块中包括有锁模块,用于实现同步保存;锁模块包括:锁获取模块,用于在接收到新的异步任务的Runnable请求时,获取锁的所有权;操作模块,用于在获取到锁的所有权时对所述的新的异步任务的Runnable请求进行存储或移出操作;锁释放模块,用于在存储或移出操作完成时,释放锁的所有权。按上述装置,所述的消息包括及时消息和延时消息;所述的消息分发模块中设有消息队列和定时器;所述的定时器用于定时,当定时器超时后将延时消息发送到消息队列中;所述的及时消息被直接放入消息队列;所述的消息队列用于按照消息进入的先后顺序有序的发送给主线程处理。一种基于Android的Handler防内存泄漏方法,其特征在于:它包括以下步骤:接收异步任务的Runnable请求;采用弱引用方法同步保存所有接收到的异步任务的Runnable请求;执行异步任务的Runnable请求,判断是否有消息要发送;在没有消息要发送时,结束子线线程;在有消息要发送时,发送消息及消息与异步线程的弱引用关系;存储消息及消息与异步线程的弱引用关系,并按照消息的时间顺序发送给主线程处理。按上述方法,采用双向链表的方式存储所述的异步任务的Runnable请求。按上述方法,存储所述的异步任务的Runnable请求后,按照优先级移出异步任务的Runnable请求。按上述方法,实现同步保存的具体方式为:在接收到新的异步任务的Runnable请求时,获取锁的所有权;在获取到锁的所有权时对所述的新的异步任务的Runnable请求进行存储或移出操作;在存储或移出操作完成时,释放锁的所有权。按上述方法,所述的消息包括及时消息和延时消息;本方法中设有消息队列和定时器;当定时器超时后将延时消息发送到消息队列中;所述的及时消息被直接放入消息队列;消息队列按照消息进入的先后顺序有序的发送给主线程处理。本专利技术的有益效果为:1、在存储异步任务的Runnable请求和发送消息时,均采用弱引用的方式,弱引用最大的优势在于当系统资源紧张的时候垃圾回收器能够自动去回收弱引用的资源,因此弱引用关系的引入,确保了资源可以顺利的被垃圾回收器进行回收,子线程和主线程正常通信的前提下确保不会发生内存泄漏的问题,从而从根本上杜绝内存泄漏问题的产生。2、通过采用双向链表的方式存储异步任务的Runnable请求,利用双向链表“在对数据进行更改的时候主要改动的是指针而不是数据本身”这一独有的特性,能够快速对数据进行删除和增加,提高效率。3、通过对线程进行分级处理,高优先级的任务可以被优先处理,充分保证对紧急任务进行优先调度。4、对消息的分发做了一定的处理。附图说明图1为本专利技术一实施例的方法流程图。图2为同步保存的方法流程图。具体实施方式名词解释:Handler:Android系统提供的一套主线程和子线程进行通信的工具内存泄漏:内存泄漏也称作“存储渗漏”,用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。(其实说白了就是该内存空间使用完毕之后未回收)即所谓内存泄漏。:在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口。Runnable是多线程的一种表现形式。垃圾回收器:是Java虚拟机提供的一套垃圾回收算法,会定期回收系统中无用的垃圾对象来释放内存空间。下面结合具体实例和附图对本专利技术做进一步的说明。实施例一:本实施例提供一种基于Android的Handler防内存泄漏装置,它包括:异步Runnable请求接收模块,用于接收异步任务的Runnable请求。同步模块,用于采用弱引用方法同步保存所有接收到的异步任务的Runnable请求。异步请求执行模块,用于执行异步任务的Runnable请求,判断是否有消息要发送;子线线程执行结束模块,用于在没有消息要发送时,结束子线线程。消息发送模块,用于在有消息要发送时,发送消息及消息与异步线程的弱引用关系。消息分发模块,用于存储消息及消息与异步线程的弱引用关系,并按照消息的时间顺序发送给主线程处理。一种基于Android的Handler防内存泄漏方法,如图1所示,包括以下步骤:S1、接收异步任务的Runnable请求。S2、采用弱引用方法同步保存所有接收到的异步任务的Runnable请求。弱引用是Java中的一个工具,默认情况下Java语言中的对象之间的关系是强引用关系。弱引用的使用方式是使用关键字WeakReference来对对象进行修饰(例如WeakReference<Date>mDate),经过WeakReference修饰过的对象就和该类存在弱引用关系了。弱引用和强引用关系最大的区别在于:1)对于强引用当内存资源使用过后如果还有任何其他资源对其持有引用关系那么垃圾回收器就无法对该资源进行回收。2)对本文档来自技高网...

【技术保护点】
一种基于Android的Handler防内存泄漏装置,其特征在于:它包括:异步Runnable请求接收模块,用于接收异步任务的Runnable请求;同步模块,用于采用弱引用方法同步保存所有接收到的异步任务的Runnable请求;异步请求执行模块,用于执行异步任务的Runnable请求,判断是否有消息要发送;子线线程执行结束模块,用于在没有消息要发送时,结束子线线程;消息发送模块,用于在有消息要发送时,发送消息及消息与异步线程的弱引用关系;消息分发模块,用于存储消息及消息与异步线程的弱引用关系,并按照消息的时间顺序发送给主线程处理。

【技术特征摘要】
1.一种基于Android的Handler防内存泄漏装置,其特征在于:它包括:异步Runnable请求接收模块,用于接收异步任务的Runnable请求;同步模块,用于采用弱引用方法同步保存所有接收到的异步任务的Runnable请求;异步请求执行模块,用于执行异步任务的Runnable请求,判断是否有消息要发送;子线线程执行结束模块,用于在没有消息要发送时,结束子线线程;消息发送模块,用于在有消息要发送时,发送消息及消息与异步线程的弱引用关系;消息分发模块,用于存储消息及消息与异步线程的弱引用关系,并按照消息的时间顺序发送给主线程处理。2.根据权利要求1所述的一种基于Android的Handler防内存泄漏装置,其特征在于:所述的同步模块中包含双向链表,用于存储所述的异步任务的Runnable请求。3.根据权利要求1或2所述的一种基于Android的Handler防内存泄漏装置,其特征在于:所述的同步模块中还存储有线程的优先级,用于按照优先级移出异步任务的Runnable请求。4.根据权利要求1或2所述的一种基于Android的Handler防内存泄漏装置,其特征在于:所述的同步模块中包括有锁模块,用于实现同步保存;锁模块包括:锁获取模块,用于在接收到新的异步任务的Runnable请求时,获取锁的所有权;操作模块,用于在获取到锁的所有权时对所述的新的异步任务的Runnable请求进行存储或移出操作;锁释放模块,用于在存储或移出操作完成时,释放锁的所有权。5.根据权利要求1所述的一种基于Android的Handler防内存泄漏装置,其特征在于:所述的消息包括及时消息和延时消息;所述的消息分发模块中设有消息队列和定时器;所述的定时器用于定时,当定时器...

【专利技术属性】
技术研发人员:张磊
申请(专利权)人:武汉斗鱼网络科技有限公司
类型:发明
国别省市:湖北;42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1