功能:帮助管理活动栈中的活动页面
解决一些问题例如
通过通知启动活动,判断是否程序在运行,是否需要重启
程序意外退出,需要主动结束栈中所有活动,才能重新启动,否则会从退出当前活动,返回上一个活动页面(但是数据重置)
首先是活动管理器
public class BaseActivityManager {
private static final String TAG = "Log.BaseAM";
private static List<BaseActivity> sActivities=new ArrayList<>();
/*
返回指定的活动
*/
public static BaseActivity getActivity(Class<?> activityClass){
for (BaseActivity base :
sActivities) {
if (base.getClass()==activityClass){
return base;
}
}
return null;
}
/*
添加活动
*/
public static void add(BaseActivity baseActivity){
sActivities.add(baseActivity);
}
/*
移除活动
*/
public static void remove(BaseActivity baseActivity){
sActivities.remove(baseActivity);
}
/*
结束所有活动
*/
public static void finishAll(){
for (BaseActivity base :
sActivities) {
if (!base.isFinishing()){
base.finish();
}
}
}
}
然后创建所有活动的基类,在基类中通过onCreate()和onDestroy()添加方法自动管理活动
public abstract class BaseActivity extends RxAppCompatActivity {
private static final String TAG = "Log.BaseActivity";
@Override
protected void onCreate(@android.support.annotation.Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
BaseActivityManager.add(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
BaseActivityManager.remove(this);
}
}
然后是一些实际应用
如何判断主活动是否存活
if (ActivityManager.getActivity(MainActivity.class)!=null){
//主活动存活
}
如何意外崩溃后结束程序重新启动
// 2s自己重新启动
Intent intent=new Intent(mContext, SplashActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(CRASH,true);
PendingIntent pendingIntent=PendingIntent.getActivity(mContext,0,intent,PendingIntent.FLAG_ONE_SHOT);
AlarmManager amr=(AlarmManager)mContext.getSystemService(Context.ALARM_SERVICE);
if (amr != null) {
amr.set(AlarmManager.RTC,System.currentTimeMillis()+2000,pendingIntent);
}
// 退出程序,清空栈中所有活动,杀死进程,否则只会默认返回到栈中上一个活动
ActivityManager.finishAll();
android.os.Process.killProcess(android.os.Process.myPid());