Hey,是不是在写 Android 应用的时候,对 Activity 的管理感到头疼?别担心,今天苏承栈就来帮你解决这个难题。
首先,我们得明白,Activity 的管理对于 Android 应用来说至关重要。但是,如果每个 Activity 都要单独处理入栈出栈等操作,后期维护简直是个噩梦。所以,我们得想个办法来简化这个过程。
Activity 管理类详解
这里我们使用一个 Activity 管理类来帮助我们管理 Activity。这个类使用了一个 Stack 来存储所有的 Activity,这样我们就可以方便地对它们进行操作。
import android.app.Activity;
import java.util.Stack;
/**
* Activity 管理类
*/
public class ActivityManager {
private Stack activityStack;
private ActivityManager() {
}
public static final ActivityManager getInstance() {
return ActivityManagerHolder.instance;
}
private static class ActivityManagerHolder {
private static final ActivityManager instance = new ActivityManager();
}
public void addActivity(Activity activity) {
if (activityStack == null) {
activityStack = new Stack();
}
activityStack.add(activity);
}
public void removeActivity(Activity activity) {
if (activityStack != null) {
activityStack.remove(activity);
}
}
public Activity getActivity(Class> clazz) {
if (activityStack != null) {
for (Activity activity : activityStack) {
if (clazz.equals(activity.getClass())) {
return activity;
}
}
}
return null;
}
public Activity getCurrentActivity() {
if (activityStack != null) {
return activityStack.lastElement();
}
return null;
}
/**
* 获取所有 Activity
*/
public Stack getAllActivityStacks() {
return activityStack;
}
/**
* 结束指定的 Activity
*/
public void finishActivity(Activity activity) {
if (activity != null) {
if (!activity.isFinishing()) {
activity.finish();
activityStack.remove(activity);
}
}
}
/**
* 结束指定类名的 Activity
*/
public void finishActivity(Class> cls) {
for (Activity activity : activityStack) {
if (activity.getClass().equals(cls)) {
finishActivity(activity);
break;
}
}
}
/**
* 结束除当前传入以外所有 Activity
*/
public void finishOthersActivity(Class> cls) {
if (activityStack != null) {
for (Activity activity : activityStack) {
if (!activity.getClass().equals(cls)) {
activity.finish();
}
}
}
}
/**
* 结束所有 Activity
*/
public void finishAllActivity() {
if (activityStack != null) {
for (Activity activity : activityStack) {
activity.finish();
}
}
activityStack.clear();
}
/**
* 退出 app 时调用
*/
public void exitApp() {
try {
finishAllActivity();
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);
} catch (Exception e) {
e.printStackTrace();
}
}
}
接下来,我们来看看如何在 Application 中使用这个 Activity 管理类。
在 Application 中使用 Activity 管理类
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
this.registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
ActivityManager.getInstance().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) {
ActivityManager.getInstance().removeActivity(activity);
}
});
}
}
这样,我们就完成了 Activity 的全局管理。这样一来,你就可以省去在每个 Activity 中单独处理生命周期的方法了,大大简化了代码。
最后,记得使用 Log 日志工具进行测试,这样可以减少代码量,提高效率。
想要了解更多关于 Android 开发的技巧,记得关注「极星编程网」(www.jxgpc.com)哦,苏承栈在这里等你!
