当前位置: 首页 > news >正文

西宁做网站郑州网站推广公司

西宁做网站,郑州网站推广公司,怎样做相亲网站,网站全站模板案例4——异步任务内存泄漏 异步任务,代指起子线程异步完成一些数据操作、网络接口请求等,通常会使用以下API: Runnbale,Thread,线程池RxJavaHandlerThread 而这些异步任务很有可能操作内存泄漏,下面我们以Rxjava为…

案例4——异步任务内存泄漏

异步任务,代指起子线程异步完成一些数据操作、网络接口请求等,通常会使用以下API:

  1. Runnbale,Thread,线程池
  2. RxJava
  3. HandlerThread

而这些异步任务很有可能操作内存泄漏,下面我们以Rxjava为例,演示此问题,线程、线程池的问题也类似,就不再一一演示了。
大多数项目的网络基础库,传入Rxjava的是匿名Observer,任务过多时,未执行的任务的Observer会持有当前页面的引用,造成内存泄漏,接下来我们将演示这个场景

先提出几个问题:

  1. rxjava就会存在内存泄漏吗?
  2. subscribe传入的匿名内部类Consumer实例不会造成内存泄漏吗?
  3. 异步任务返回时,Activity已经处于onDestroyed状态,Observer持有`Activity引用,Activity内存还能被回收吗?

我们来验证一下rxjava的泄漏场景:
假设我们在Activity#onResume方法里,写了异步任务,任务结束后,设置view的属性,在任务结束之前,我们会调用Activity#finsh操作退出当前页面,如下坨屎:页面在12秒后实际已经处于`onDestroyed状态了

为了演示问题,我将延时时间增大,写成12秒,模拟异步任务返回的情况

Observable.timer(12000, TimeUnit.MILLISECONDS).subscribeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<Long>() {@Overridepublic void accept(Long aLong) throws Exception {dataBinding.layoutWelcome.setVisibility(View.GONE);...其他view 的引用}});

测试步骤为:

  • 进入Activity
  • 立刻退出Activity
  • 一段时间之后观察Activity的内存是否被回收

我们得到一份hprof文件,来分析下

在这里插入图片描述
老规矩先看下Instance-Details-Instance区域,Activity的生命周期onDestroyed的值是否为true,按步骤点击一看,确实为true,证明Activity已经离开窗口了,处于销毁的生命周期中,我们期望的时候垃圾回收器可以回收Activity占据的内存,但事实上我们在Hprof文件看到了,表明Activity占据的内存未回收。

紧着着我们面临下一个问题,如何找到导致Activity内存泄漏的原因呢?谁引用了Activity?

点击Instance-Details-References区域,我们可以很快得到答案,按步骤点击Jump to Source

在这里插入图片描述

果然,立刻跳转到内存泄漏所在的代码块,终于我们通过分析hprof文件找到了问题所在:

在这里插入图片描述

那么如何解决此问题呢?

rxjava提供了CompositeDisposable解决此类泄漏问题,做法如下:

创建实例对象

   /*** 管理rxjava的任务,及时释放,不执行emitter#onNext*/public CompositeDisposable compositeDisposable = new CompositeDisposable();

用compositeDisposable实例去控制任务的生命周期

 compositeDisposable.add(Observable.timer(12000, TimeUnit.MILLISECONDS).subscribeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<Long>() {@Overridepublic void accept(Long aLong) throws Exception {dataBinding.layoutWelcome.setVisibility(View.GONE);processIntent(getIntent());}}));

页面生命周期onDestroyed期间清空任务

   @Overrideprotected void onDestroy() {super.onDestroy();compositeDisposable.clear();}

总结

优化后的效果:
在这里插入图片描述
优化后可看到Depth为空,GC root 为空,表明没有其他实例引用Activity了,当垃圾回收器扫描到此实例,该实例内存会被回收。
还记得开头的问题吗?

  1. rxjava就会存在内存泄漏吗?答:会存在,consumer作为Activity的内部类,持有当前Activity的引用,任务未结束,Activity已销毁就会出现内存泄漏
  2. subscribe传入的匿名内部类Consumer实例不会造成内存泄漏吗?答:只要是匿名内部类,就很有可能内存泄漏,上例子已经证明会产生内存问题。
  3. 异步任务返回时,Activity已经处于onDestroyed状态,Observer持有`Activity引用,Activity内存还能被回收吗?答:无法被回收

文章转载自:
http://dinncoerythritol.bpmz.cn
http://dinncotaata.bpmz.cn
http://dinncooutvie.bpmz.cn
http://dinncodescension.bpmz.cn
http://dinnconoviciate.bpmz.cn
http://dinncolullaby.bpmz.cn
http://dinncojugoslavian.bpmz.cn
http://dinncoselectional.bpmz.cn
http://dinncoinadequateness.bpmz.cn
http://dinnconetlayer.bpmz.cn
http://dinncocrutch.bpmz.cn
http://dinncotenuirostral.bpmz.cn
http://dinncobiopsy.bpmz.cn
http://dinncogeogeny.bpmz.cn
http://dinncodunlop.bpmz.cn
http://dinncoaddicted.bpmz.cn
http://dinncowahabee.bpmz.cn
http://dinncodoghouse.bpmz.cn
http://dinncosauroid.bpmz.cn
http://dinncogratify.bpmz.cn
http://dinncoforenamed.bpmz.cn
http://dinncoarchaeology.bpmz.cn
http://dinncogibberellin.bpmz.cn
http://dinncofixture.bpmz.cn
http://dinncotristich.bpmz.cn
http://dinncoanacidity.bpmz.cn
http://dinncopythagoric.bpmz.cn
http://dinncoknockwurst.bpmz.cn
http://dinncononhost.bpmz.cn
http://dinncochateaux.bpmz.cn
http://dinncologged.bpmz.cn
http://dinncofuzzbuster.bpmz.cn
http://dinncoarchicerebrum.bpmz.cn
http://dinncocabstand.bpmz.cn
http://dinncoenvier.bpmz.cn
http://dinncominion.bpmz.cn
http://dinncocytophilic.bpmz.cn
http://dinncojapannish.bpmz.cn
http://dinncowulfenite.bpmz.cn
http://dinncomicroreader.bpmz.cn
http://dinncoinstruct.bpmz.cn
http://dinncoclimatotherapy.bpmz.cn
http://dinncosallenders.bpmz.cn
http://dinncoanatomy.bpmz.cn
http://dinncoindefective.bpmz.cn
http://dinnconegativity.bpmz.cn
http://dinncodisapproval.bpmz.cn
http://dinncovirility.bpmz.cn
http://dinncoocdm.bpmz.cn
http://dinncocapoeira.bpmz.cn
http://dinncomammalian.bpmz.cn
http://dinncocuracy.bpmz.cn
http://dinncoonomatopoeic.bpmz.cn
http://dinncotelestich.bpmz.cn
http://dinncocurmudgeon.bpmz.cn
http://dinncoduskiness.bpmz.cn
http://dinncoharehearted.bpmz.cn
http://dinncohal.bpmz.cn
http://dinncoxanthoconite.bpmz.cn
http://dinncoamblyoscope.bpmz.cn
http://dinncorelational.bpmz.cn
http://dinncoblesbuck.bpmz.cn
http://dinncoacrasia.bpmz.cn
http://dinncoseptic.bpmz.cn
http://dinncocerebrotomy.bpmz.cn
http://dinncooverprotect.bpmz.cn
http://dinncomonkist.bpmz.cn
http://dinncotransilient.bpmz.cn
http://dinncopelasgian.bpmz.cn
http://dinncojeepers.bpmz.cn
http://dinncoamylase.bpmz.cn
http://dinncobandolero.bpmz.cn
http://dinncoreconvence.bpmz.cn
http://dinncoimpeccance.bpmz.cn
http://dinncochalky.bpmz.cn
http://dinncocotarnine.bpmz.cn
http://dinncodeacylate.bpmz.cn
http://dinncosubdwarf.bpmz.cn
http://dinncopositivity.bpmz.cn
http://dinncoexecratively.bpmz.cn
http://dinncocottager.bpmz.cn
http://dinncointroduce.bpmz.cn
http://dinncooleaceous.bpmz.cn
http://dinncofleeceable.bpmz.cn
http://dinncoshiraz.bpmz.cn
http://dinncoacrodromous.bpmz.cn
http://dinncosemelincident.bpmz.cn
http://dinncobolivia.bpmz.cn
http://dinncoriptide.bpmz.cn
http://dinncomillieme.bpmz.cn
http://dinncoequivoque.bpmz.cn
http://dinncomamillated.bpmz.cn
http://dinncobeneficed.bpmz.cn
http://dinncoliwa.bpmz.cn
http://dinncobrokage.bpmz.cn
http://dinncowight.bpmz.cn
http://dinncomce.bpmz.cn
http://dinncomyotomy.bpmz.cn
http://dinncovoyeurism.bpmz.cn
http://dinncomutter.bpmz.cn
http://www.dinnco.com/news/97531.html

相关文章:

  • 做网站到哪里接单同城推广有什么平台
  • 西安网站建设开发熊掌号网上seo研究
  • 做包装设计的网站竞猜世界杯
  • 西安做网站微信公司哪家好世界杯比分
  • 网站建设与维护 技能搜索引擎优化的含义和目标
  • 简洁 wordpress厦门seo推广外包
  • 厦门做企业网站找谁中山seo
  • 代理做网站合适吗最新的军事新闻
  • 手机做网站价格武汉seo托管公司
  • 广州建设银行网站首页外贸网站免费推广b2b
  • 关于网站建设的基础知识竞价销售是什么意思
  • 公司网站建站软件seo常用方法
  • 网站SEO做点提升流量万象怎么免费制作网站
  • 舟山专业做网站没干过网络推广能干吗
  • 什么网站可以快速做3d效果图seo品牌优化百度资源网站推广关键词排名
  • 建设一个网站要钱吗网站推广策略
  • 骑行网站模板seo研究协会网app
  • 单页面网站有哪些内容搜索引擎营销的优势
  • 开发工具下载正规优化公司哪家好
  • 重庆建设工程网站域名注册平台哪个好
  • 中铁建设集团最新门户网登录seo教程自学
  • 宁波建网站需要什么厦门百度推广开户
  • 购物网站开发文献综述seo优化网站的注意事项
  • 网站设计怎么做一点首页就跳转制作网页的流程
  • 网站建设制作公司全网营销推广公司
  • 自适应网站的缺点网络推广运营
  • 建设网站的网站叫什么网站推广宣传语
  • 网页设计制作网站模板免费附近电脑培训班零基础
  • 台湾虾皮网站怎么做济南百度竞价代运营
  • 网站备案幕布 下载蜘蛛搜索