这个问题通常出现在应用程序处于后台状态下。如果尝试从后台启动多个Activity,则会发生错误。要解决这个问题,可以使用以下代码来重写应用程序的后台流程:
public class MyApplication extends Application {
private static MyApplication instance;
public static synchronized MyApplication getInstance() {
return instance;
}
@Override
public void onCreate() {
super.onCreate();
instance = this;
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) { }
@Override
public void onActivityStarted(Activity activity) { }
@Override
public void onActivityResumed(Activity activity) { }
@Override
public void onActivityPaused(Activity activity) { }
@Override
public void onActivityStopped(Activity activity) { }
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) { }
@Override
public void onActivityDestroyed(Activity activity) {
// 当Activity被销毁时,从Activity列表中删除该Activity
MyActivityManager.getInstance().remove(activity);
}
});
}
}
public class MyActivityManager {
private static MyActivityManager instance;
private final List activities = new LinkedList<>();
public static synchronized MyActivityManager getInstance() {
if (instance == null) {
instance = new MyActivityManager();
}
return instance;
}
private MyActivityManager() { }
/**
* 添加Activity到列表中
* @param activity
*/
public synchronized void add(Activity activity) {
activities.add(activity);
}
/**
* 从列表中删除Activity
* @param activity
*/
public synchronized void remove(Activity activity) {
activities.remove(activity);
}
/**
* 获取列表中的最后一个Activity
* @return
*/
public synchronized Activity getLast() {
if (activities.size() > 0) {
return activities.get(activities.size() - 1);
}
return null;
}
/**
* 移除所有的Activity