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

网站无后台可以上框架外包加工网缝纫机外放加工活

网站无后台可以上框架,外包加工网缝纫机外放加工活,wordpress首页文章图片不显示,网片点焊机LeakCanary是我很久之前看的东西了#xff0c;我当时侯对它的印象就是它可以用来检测内存泄漏#xff0c;具体原理就是将弱引用对象延迟个5s然后看是否被回收,如果没有被回收,那么就说明发生了内存泄漏,其他的也没有仔细地看 现在就详细地梳理一遍这个流程#xff1a; 1.L…LeakCanary是我很久之前看的东西了我当时侯对它的印象就是它可以用来检测内存泄漏具体原理就是将弱引用对象延迟个5s然后看是否被回收,如果没有被回收,那么就说明发生了内存泄漏,其他的也没有仔细地看 现在就详细地梳理一遍这个流程 1.LeakCanary的使用方法 很简单,我们只需要在build.gradle.kts里面加上 debugImplementation (com.squareup.leakcanary:leakcanary-android:2.12) 注意这个leakcanary是2.6的版本,以前,我们需要手动在Application中调用LeakCanary.install(this);进行初始化工作 但是现在2.4的版本之后就不需要手动调用了当我们加上上面的那个之后点击sync运行,当我们点击我们AndroidStudio的Run app,安装好app之后,你会发现你的手机上会多一个这个app 这个app就会来汇报存在哪些内存泄漏 好,现在有2个问题 1:为什么我们其他的导入用的是 implementation() 而LeakCanary用的是 debugImplementation 2:为什么要生成一个Leaks用来检测内存泄漏 我们分别来看看吧 1.1为什么导入用的是debugImplementation 在网上搜到的资料显示的是 在Android项目中通常会使用两种依赖配置来引入库implementation和debugImplementation。其中implementation配置表示该库是项目的一部分会被打包到最终的发布版本中而debugImplementation配置表示该库仅在调试模式下使用不会被打包到发布版本中。 LeakCanary通常被用于调试和排查内存泄漏问题因此建议将其导入为debugImplementation。这样在发布版本中不会包含LeakCanary的代码避免增加应用的体积和性能开销。 这个怎么理解呢?在AndroidStudio里面双击shift然后你搜索leakcanary然后你随便点进去看它的path你会发现,它的路径都不是在该项目上的,而是在你电脑的gradle路径下面 它的主要目的就是不想让LeakCanary的代码出现在Release版本的项目中 注意哦这里说的是Release版本的项目也就仅仅针对于Release版本不包括Debug版本哦 1.2为什么要生成一个Leaks来检测内存泄漏 搜到的原因是这样的,因为内存泄漏的检查和分析过程涉及到大量复杂的堆转储操作,可能会阻塞主线程影响正常应用的运行,因此LeakCanary将耗时操作转移到单独进程中处理,然后通过Leaks应用以图形化可视的方式方便用户查看。 那这样还有一个疑问了,既然是大量复杂的运算,与其开一个新的进程,为什么我们不新开一个线程来解决呢? 我的理解是使用单独的进程而不是新开一个线程它的好处就在于不必担心影响主应用的内存分配和其他系统资源保证独立性方便进行检测 2.LeakCanary的原理 2.1LeakCanary的初始化 LeakCanary的初始化早期是需要我们自己手动在application的onCreate()里面进行初始化的但是现在导入LeakCanary的包之后就不用我们手动进行初始化了记住这里说的是不用手动进行初始化了不是不用进行初始化了它会在MainProcessAppWatcherInstaller.kt这个类里面进行初始化通过调用 AppWatcher.manualInstall() 然后才进行的初始化,那么为什么之前版本的LeakCanary是在Application的onCreate()初始化,而现在是在MainProcessAppWatcherInstaller.kt这个类呢首先MainProcessAppWatcherInstaller.kt这个类继承自ContentProvider (其实我感觉很无语的一件事就是MainProcessAppWatcherInstaller.kt他是在gradler的,但是ContentProvider这个类是在SDK里面的) 其中ContentProvider的onCreate()的生命周期是要早于Application的onCreate()方法而要晚于Application的attachBaseContext的生命周期 那么Application的attachBaseContext话,它是当application刚开始进行初始化的时候调用的,当application的初始化执行完毕之后才会调用application的onCreate()方法进行全局性的初始化,比如单例对象的创建。 现在LeakCanary是在MainProcessAppWatcherInstaller.kt中注册就是为了监测application初始化的过程中是否会存在内存泄露问题,可以提供更全面,准确得到内存泄露监测效果 2.2LeakCanary的原理 LeakCanary的原理其实很简单,我们以Activity举例,Android为我们提供了一个Activity的生命周期监测的一个接口 ActivityLifeCycleCallBack接口,当Activity的生命周期处于onDestroyed()的时候,它就会生成一个Activity的弱引用对象并且为这个对象生成一个键,以键值对的方式存进Map中,这个Map中就是用来存储还有哪些对象没有被回收掉,我们通过Handler让这个弱引用对象延迟5s操作,如果它被回收掉,那么它就会被放进一个弱引用队列里面,并且将它从Map中移出调,如果没有被回收调的话 ,那么就会进行手动GC,如果仍然没有被回收掉,那么就说明发生了内存泄露。最终生成一个hprof文件,最开始我们不是说的那个Leaks app嘛,它读取hprof文件里面的数据,分析导致内存泄露的引用链,将分析的结果展示给用户
http://www.zqtcl.cn/news/410028/

相关文章:

  • 网站建设需要做哪些工作做胃镜需那好天津津门网站A
  • 做网站申请域名的流程辽宁省工程造价网
  • 网站系统维护一般多长时间金华高端网站设计
  • 做网站公司销售开场白企业网站规划与开发
  • 兰州新区建站不锈钢网站建设
  • 淘宝小网站怎么做的电商网站有哪些
  • 哪些网站可以做画赚钱wordpress go跳转页
  • 怎么做新网站上线通稿深圳罗湖区网站建设公司
  • php 企业网站做网站可以赚钱吗
  • 局域网视频网站建设点播系统长沙3合1网站建设价格
  • 静态网站 服务器合肥做个网站什么价格
  • 宁阳网站设计家电网站设计方案
  • 网站备案icp秦皇岛黄金海岸
  • dedecms 金融类网站模板wordpress dux5.3
  • 学校网站源码wordpress向网站上传文件怎么做
  • 电子商务网站建设说课稿济南网站建设方案报价
  • 谈谈设计和建设网站体会wordpress header在哪
  • 360免费建站怎么进不去域名托管
  • 做网站视频存储网站建设有云端吗
  • 建网站如何上传南通 网站优化
  • 青海学会网站建设公司果汁网站模板
  • 10_10_网站建站怎么做网站链接支付
  • 九台网站甘肃网站优化
  • phpcms 网站源码建设银行科技中心网站首页
  • 营销型网站建设php源码无锡设计网站公司
  • 在线制作简历的网站绍兴seo全网营销
  • 个人做网站接装修活哪个网站好长沙企业网站建设分公司
  • 青岛网站制作辰星辰中国万网icp网站备案专题
  • 做淘宝相关网站上海网站建设做物流一
  • 服装配件网站建设 中企动力静态网站 后台