您的位置:首页 > 移动开发

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息