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

来源:互联网 发布:淘宝宝贝名称规则 编辑:程序博客网 时间:2024/06/16 01:12
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;        }    }

原创粉丝点击