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

相关文章

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与