Android项目中Activity生命周期高效的管理方式
项目管理:理解项目生命周期,制定并执行有效的项目计划。 #生活常识# #职场技巧# #知识技能更新#
Activity生命周期的管理方式 在我们的开发过程中,有时候要操作Activity的全局生命周期,故我们需要保存Activity的生命周期,以及进行管理。如何进行存放Activity的生命周期呢?
工具类下载地址:http://download.csdn.net/download/gl_mine_csdn/9937815
在此之前,我们需要知道Application下的一个接口和一个方法,通过这两个进行管理Activity的生命周期。
public interface ActivityLifecycleCallbacks { void onActivityCreated(Activity activity, Bundle savedInstanceState); void onActivityStarted(Activity activity); void onActivityResumed(Activity activity); void onActivityPaused(Activity activity); void onActivityStopped(Activity activity); void onActivitySaveInstanceState(Activity activity, Bundle outState); void onActivityDestroyed(Activity activity); }123456789
public void registerActivityLifecycleCallbacks(ActivityLifecycleCallbacks callback) { synchronized (mActivityLifecycleCallbacks) { mActivityLifecycleCallbacks.add(callback); } }12345
接下来我们便可以进行管理了,具体实现方式如下。
public class ActivityLifeCallbackManager implements Application.ActivityLifecycleCallbacks { public final List<WeakReference<Activity>> weakReferences = new LinkedList<WeakReference<Activity>>(); private boolean isAppForeground; @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { weakReferences.add(new WeakReference<Activity>(activity)); } @Override public void onActivityStarted(Activity activity) { } @Override public void onActivityResumed(Activity activity) { isAppForeground = true; } @Override public void onActivityPaused(Activity activity) { isAppForeground = false; } @Override public void onActivityStopped(Activity activity) { } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } @Override public void onActivityDestroyed(Activity activity) { final Iterator<WeakReference<Activity>> it = weakReferences.iterator(); while (it.hasNext()) { final WeakReference<Activity> weakReference = it.next(); if (weakReference.get() == null) { it.remove(); } else if (weakReference.get() == activity) { it.remove(); } } } public void finishAll() { final Iterator<WeakReference<Activity>> it = weakReferences.iterator(); while (it.hasNext()) { final WeakReference<Activity> weakReference = it.next(); final Activity activity = weakReference.get(); if (activity != null) { activity.finish(); } } weakReferences.clear(); } public Activity getTopActivity() { if (weakReferences.size() > 0) { return weakReferences.get(weakReferences.size() - 1).get(); } else { return null; } } public void popTopActivity() { final Iterator<WeakReference<Activity>> it = weakReferences.iterator(); final WeakReference<Activity> weakReference = it.next(); final Activity activity = weakReference.get(); if (activity == null) { it.remove(); } else { activity.finish(); } } public boolean isAppForeground() { return isAppForeground; } }
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283在Application的OnCreate()方法下进行注册。
ActivityLifeCallbackManager mActivityLifeCallbackManager=new ActivityLifeCallbackManager(); registerActivityLifecycleCallbacks(mActivityLifeCallbackManager);12 在BaseActivity中进行管理Activity
在BaseActivity中进行管理Activity的生命周期是最常见的一种方式,下面简单进行介绍一下做法。
public final class ActivityLifeCallbackManager { // 由于此队列可能随时添加,随时删除,随时关闭,所以要同步 private static ConcurrentLinkedQueue<FragmentActivity> activityList = new ConcurrentLinkedQueue<>(); private static List<Fragment> fragmentList = new LinkedList<>(); private static ActivityLifeCallbackManager instance; private CMYExitApplication() { } // 单例模式中获取唯一的ExitApplication实例 public static synchronized CMYExitApplication getInstance() { if (instance == null) { instance = new CMYExitApplication(); } return instance; } public static boolean isTopActivity(Context ctx) { ActivityManager activityManager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE); List<RunningTaskInfo> tasksInfo = activityManager.getRunningTasks(1); if (tasksInfo.size() > 0) { if (ctx.getPackageName().equals(tasksInfo.get(0).topActivity.getPackageName())) { return true; } } return false; } public void addFragment(Fragment fragment) { if (fragment != null) { fragmentList.add(fragment); } } public void removeFragment(Fragment fragment) { if (fragment != null) { fragmentList.remove(fragment); } } public void addActivity(FragmentActivity activity) { if (activity != null) { activityList.add(activity); } } public void removeActivity(Activity activity) { if (activity != null) { activityList.remove(activity); } } public void finishActivity(String className) { Activity target = null; for (Activity activity : activityList) { if (activity.getClass().getName().equals(className)) { target = activity; } } if (target != null)//只关闭最后一个 会执行destroy方法,而此方法中有removeActivity(activity)的方法 target.finish(); } /** * 此activity是否正在运行中 * * @param className * @return */ public boolean isExistActivity(String className) { for (Activity activity : activityList) { if (activity.getClass().getName().equals(className)) { return true; } } return false; } private void finishAllActivitie() { if (activityList != null) { for (Activity activity : activityList) { if (activity != null) { activity.finish(); } } activityList.clear(); } } public String getTopActivity(Context ctx) { ActivityManager activityManager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE); List<RunningTaskInfo> tasksInfo = activityManager.getRunningTasks(1); if (tasksInfo.size() > 0) { return ctx.getPackageName(); } return ""; } /** * 获得最顶端的该类 * * @param className * @return */ public FragmentActivity getTopActivity(String className) { Iterator<FragmentActivity> iterator = activityList.iterator(); FragmentActivity targetActivity = null; while (iterator.hasNext()) { FragmentActivity temp = iterator.next(); if (temp.getClass().getName().equals(className)) {// 要倒序所以要不断遍历,直到最后一个 targetActivity = temp; } } return targetActivity; } /** * 获取指定的Fragment * @param className * @return */ public Fragment getFragmentByName(String className) { Iterator<Fragment> iterator = fragmentList.iterator(); Fragment targetActivity = null; while (iterator.hasNext()) { Fragment temp = iterator.next(); if (temp.getClass().getName().equals(className)) {// 要倒序所以要不断遍历,直到最后一个 targetActivity = temp; } } return targetActivity; } public void exitApp(int type) { finishAllActivitie(); if (type == 1) {// 异常退出 android.os.Process.killProcess(android.os.Process.myPid()); System.exit(1);// 非0参数都可以非正常的方式结束虚拟机 }else {// 正常退出 System.exit(0);// 非0参数都可以非正常的方式结束虚拟机 } } }
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148在BaseActivity的OnCreate()方法下进行注册。
ActivityLifeCallbackManager.getInstance().addActivity(this);1
通过以上方式完全可以解决Activity的生命周期的管理问题。更高效的Activity的生命周期管理方式。
网址:Android项目中Activity生命周期高效的管理方式 https://www.yuejiaxmz.com/news/view/738422
相关内容
Android生命周期:理解与应用基于Android平台的记事本软件(Android Studio项目+报告+app文件)
Activity以各种方式启动Activity、状态保存,完全退出等
探索高效日程管理:AndroidCalendar 项目深度解析
健康生活方式能提高中国成年人的期望寿命
基于Android平台的生活小助手app的设计与实现
Android周历大揭秘:如何轻松管理你的日程生活?
揭秘Android周视图:高效日程管理,轻松驾驭工作与生活
设备全生命周期管理.docx
全网讲的最好,Monkey自动化测试(Android)吐血整理(超详细)