Android Tip-Activity Management

Keywords: Android Java

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);
                        }
                    }
                }
            });
        }
    }
}

Posted by cedricm on Tue, 26 Mar 2019 21:57:28 -0700