package com.devtf_l.app.base; import java.util.LinkedList; import java.util.List; import android.app.Activity; import android.app.Application; import android.content.res.Configuration; import com.devtf_l.app.activity.ExceptionAlertActivity; import com.devtf_l.app.activity.ToolbarMenudrawerActivity; import com.devtf_l.app.crash.DevtfUncaughtExceptionHandler; import com.devtf_l.app.util.Timber; /** * @desc 自定义Application 做一些管理 * @author ljh lijunhuayc@sina.com 2015-4-26 */ public class DevtfApplication extends Application { List<BaseActivity> acList = null; @Override public void onCreate() { super.onCreate(); DevtfUncaughtExceptionHandler.getInstance().init(getApplicationContext()); acList = new LinkedList<BaseActivity>(); Timber.plant(new Timber.DebugTree()); } public void addActivity(BaseActivity mBaseActivity) { synchronized (acList) { //控制主界面在栈底,新建主界面activity并添加进acList之前须clear列表 if(mBaseActivity.getClass() == ToolbarMenudrawerActivity.class){ finishAll(); } if(mBaseActivity.getClass() == ExceptionAlertActivity.class) return; //异常处理界面采用singleInstance 模式,不做管理 acList.add(mBaseActivity); Timber.i("当前activity数量:%s", acList.size()); } } public void removeActivity(BaseActivity mBaseActivity) { synchronized (acList) { acList.remove(mBaseActivity); } } public void exitApp() { onTerminate(); } @Override public void onTerminate() { super.onTerminate(); finishAll(); System.exit(0); } public void finishAll() { for (Activity ac : acList) { ac.finish(); } acList.clear(); } @Override public void onLowMemory() { super.onLowMemory(); } @Override public void onTrimMemory(int level) { super.onTrimMemory(level); } /** * 利用以上两回调方法做一些必要的内存释放 1、OnLowMemory被回调时,已经没有后台进程;而onTrimMemory被回调时,还有后台进程。 * 2、OnLowMemory是在最后一个后台进程被杀时调用,一般情况是low memory killer * 杀进程后触发;而OnTrimMemory的触发更频繁,每次计算进程优先级时,只要满足条件,都会触发。 * 3、通过一键清理后,OnLowMemory不会被触发,而OnTrimMemory会被触发一次。 */ @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); } }