I. overview
This chapter mainly records the management methods of activity in the android development process. We usually have sudden withdrawal of app or acquisition of an active object in the development process. At this time, it will be convenient to have a globally managed activity stack.
Android system has its own activity management mechanism, namely Activity Stack (stack), which adheres to the principle of "first in, last out". So we use Stack to manage Activity. Below I will record two different management methods, which can be selected according to the situation.
If there are any mistakes or optimization, please leave a message for guidance.
BaseActivity with AppManager Management Class
In the early stages of project construction, some base base classes may be created. Usually we will create a Base Activity to manage the universality of the entire application activity. The following AppManager tool classes can be used to manage activity in BaseActivity's onCreate and onDestroy.
Core code:
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import java.util.Stack;
public class AppManager {
// activity management stack
private static Stack<Activity> activityStack;
// Create singleton objects
private static AppManager instance;
private AppManager() {
}
public static AppManager getAppManager() {
if (instance == null) {
instance = new AppManager();
}
return instance;
}
// Adding activity
public void addActivity(Activity activity) {
if (activityStack == null) {
activityStack = new Stack<Activity>();
}
activityStack.add(activity);
}
// Get the current activity instance
public Activity currentActivity() {
Activity activity = activityStack.lastElement();
return activity;
}
public void finishActivity() {
Activity activity = activityStack.lastElement();
finishActivity(activity);
}
// End activity and move out of the management stack
public void finishActivity(Activity activity) {
if (activity != null) {
activityStack.remove(activity);
activity.finish();
activity = null;
}
}
public void finishActivity(Class<?> cls) {
for (Activity activity: activityStack) {
if (activity.getClass().equals(cls)) {
finishActivity(activity);
}
}
}
public void finishAll() {
for (Activity activity: activityStack) {
activity.finish();
}
activityStack.clear();
}
// Exit application
public void AppExit(Context context) {
try {
finishAll();
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
activityManager.killBackgroundProcesses(context.getPackageName());
System.exit(0);
} catch (Exception e) {
e.printStackTrace();
}
}
}
3. Customize Application Classes
In order to manage the global variables of the application and the initialization of some libraries, customizing the application is almost necessary for our project development. Android 4.0 (API-14) started with an additional method in Application that sets the lifecycle of global listening Activity. This is registerActivity Lifecycle Callbacks
Core code:
import android.app.Activity;
import android.app.Application;
import android.os.Build;
import android.os.Bundle;
import java.util.Stack;
public class MyApplication extends Application {
private static MyApplication instance;
private static Stack<Activity> activityStack = new Stack<Activity>();
private MyApplication() {
}
public static MyApplication getInstance() {
if (instance == null) {
instance = new MyApplication();
}
return instance;
}
@Override
public void onCreate() {
super.onCreate();
registerActivityListener();
}
private void addActivity(Activity activity) {
if (activityStack != null && activity != null) {
activityStack.add(activity);
}
}
private void registerActivityListener() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
addActivity(activity);
}
@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) {
if (activityStack != null && activity != null) {
if (activityStack.contains(activity)) {
activityStack.remove(activity);
}
}
}
});
}
}
}