LeakCanary测试app内存泄露+registerActivityLifecycleCallbacks管理Activity的生命周期

本文主要是介绍LeakCanary测试app内存泄露+registerActivityLifecycleCallbacks管理Activity的生命周期,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

public class MyApplication extends Application {private String tag = "MyApplication";private static Stack<Activity> activityStack;//检测内存泄露private RefWatcher refWatcher;@Overridepublic void onCreate() {super.onCreate();//检测内存泄露if (LeakCanary.isInAnalyzerProcess(this)) {return;}refWatcher = LeakCanary.install(this);if (activityStack == null) {activityStack = new Stack<>();}addActivityLifeCallBack();}private void addActivityLifeCallBack() {registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {@Overridepublic void onActivityCreated(Activity activity, Bundle savedInstanceState) {Log.i(tag, "----------------onActivityCreated-----------------" + activity.toString());activityStack.add(activity);Log.i(tag, "onActivityCreated->activityStack:" + activityStack.size());refWatcher.watch(activity);}@Overridepublic void onActivityStarted(Activity activity) {Log.i(tag, "----------------onActivityStarted-----------------" + activity.toString());}@Overridepublic void onActivitySaveInstanceState(Activity activity, Bundle outState) {Log.i(tag, "----------------onActivitySaveInstanceState-----------------" + activity.toString());}@Overridepublic void onActivityResumed(Activity activity) {Log.i(tag, "----------------onActivityResumed-----------------" + activity.toString());}@Overridepublic void onActivityPaused(Activity activity) {Log.i(tag, "----------------onActivityPaused-----------------" + activity.toString());}@Overridepublic void onActivityStopped(Activity activity) {Log.i(tag, "----------------onActivityStopped-----------------" + activity.toString());}@Overridepublic void onActivityDestroyed(Activity activity) {Log.i(tag, "----------------onActivityDestroyed-----------------" + activity.toString());activityStack.remove(activity);Log.i(tag, "onActivityDestroyed->activityStack:" + activityStack.size());}});}/*** 关闭所有的Activity*/public void finishAll() {Log.i(tag, "----------------finishAll-----------------" + activityStack.size());for (int i = 0; i < activityStack.size(); i++) {if (null != activityStack.get(i)) {activityStack.get(i).finish();}}activityStack.clear();}/*** 获取当前的activity 的名字*/public String getCurrentActivityName(Activity activity) {String contextString = activity.toString();return contextString.substring(contextString.lastIndexOf(".") + 1, contextString.indexOf("@"));}/*** 获取当前的activity*/public Activity getCurrentActivity() {Log.i(tag, "----------------getCurrentActivity-----------------" + activityStack.size());if (activityStack.size() > 0) {Log.i(tag, "getCurrentActivity!=NULL");return activityStack.lastElement();} else {Log.i(tag, "getCurrentActivity==NULL");return null;}}

这篇关于LeakCanary测试app内存泄露+registerActivityLifecycleCallbacks管理Activity的生命周期的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144745

相关文章

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

python uv包管理小结

《pythonuv包管理小结》uv是一个高性能的Python包管理工具,它不仅能够高效地处理包管理和依赖解析,还提供了对Python版本管理的支持,本文主要介绍了pythonuv包管理小结,具有一... 目录安装 uv使用 uv 管理 python 版本安装指定版本的 Python查看已安装的 Python

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

nvm如何切换与管理node版本

《nvm如何切换与管理node版本》:本文主要介绍nvm如何切换与管理node版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录nvm切换与管理node版本nvm安装nvm常用命令总结nvm切换与管理node版本nvm适用于多项目同时开发,然后项目适配no

Redis实现RBAC权限管理

《Redis实现RBAC权限管理》本文主要介绍了Redis实现RBAC权限管理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1. 什么是 RBAC?2. 为什么使用 Redis 实现 RBAC?3. 设计 RBAC 数据结构

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR