LeakCanary测试app内存泄露+registerActivityLifecycleCallbacks管理Activity的生命周期
2017-12-22 17:28
127 查看
public class MyApplication extends Application { private String tag = "MyApplication"; private static Stack<Activity> activityStack; //检测内存泄露 private RefWatcher refWatcher; @Override public 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() { @Override public 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); } @Override public void onActivityStarted(Activity activity) { Log.i(tag, "----------------onActivityStarted-----------------" + activity.toString()); } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { Log.i(tag, "----------------onActivitySaveInstanceState-----------------" + activity.toString()); } @Override public void onActivityResumed(Activity activity) { Log.i(tag, "----------------onActivityResumed-----------------" + activity.toString()); } @Override public void onActivityPaused(Activity activity) { Log.i(tag, "----------------onActivityPaused-----------------" + activity.toString()); } @Override public void onActivityStopped(Activity activity) { Log.i(tag, "----------------onActivityStopped-----------------" + activity.toString()); } @Override public 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; } }
相关文章推荐
- 通俗易懂Tomcat中Servlet的生命周期
- 线程的生命周期
- 类的生命周期
- Android开发探索第一章 Activity生命周期及启动模式总结(二)
- angularjs2 组件的生命周期
- Activity和Service的生命周期(图)
- 第十四章之Activity的生命周期
- Django 请求生命周期【图示】
- servlet的执行原理与生命周期
- Unity学习笔记(2)- MonoBehaviour类的生命周期及脚本报错收集
- 详解Activity ——生命周期
- session生命周期
- Activity的正常、异常生命周期
- Android的生命周期
- Java虚拟机(三)垃圾标记算法与Java对象的生命周期
- android 横竖屏切换生命周期详解
- 安卓训练-开始-管理 Activity 生命周期
- Android Activity的生命周期和启动模式(一)——典型情况下的生命周期分析
- ASP.NET WAB API 2 生命周期管道图
- 深入剖析Android四大组件(一)——Activity生命周期具体解释