Android 完全退出 App,Activity管理者 (Exit)
来源:互联网 发布:怎么用淘宝客卖东西 编辑:程序博客网 时间:2024/05/16 14:37
Android 完全退出 App,Activity管理者 (Exit)
转载请标明出处:
http://blog.csdn.net/changs_roid/article/details/52848552
今天还看到有人对app退出感到苦恼,因此分享下自己的经验。我在项目中会建立一个activity的管理者ActControl,管理所有activity栈中的act。
结束时你可以遍历这个act集合。全部finish掉就行了。
用法:
在BaseActivity中
public abstract class BaseActivity extends AppCompatActivity { @Override protected void onResume() { super.onResume(); ActControl.onResume(this); } @Override protected void onDestroy() { super.onDestroy(); ActControl.onDestroy(this); } //other... }
/** * 获取最顶层的act实例 * @return act实例 */ public static BaseActivity getTop(); /** * 查找某个act是否任务栈 * @param cls 要查找的act的class * @return 满足的act实例 */ public BaseActivity findExistInner(Class<?> cls);
public class ActControl { private static final String TAG = "ActControl"; private List<SoftReference<BaseActivity>> list; private ActControl() { this.list = new ArrayList<>(); } private void resume(BaseActivity activity) { int size = list.size(); for (int i = 0; i < size; i++) { SoftReference<BaseActivity> softReference = list.get(i); BaseActivity act = softReference.get(); if (act == null) { list.remove(softReference); i--; size--; } else if (act == activity) { if (i != size - 1) { Collections.swap(list, i, size - 1); } return; } } list.add(new SoftReference<>(activity)); } private void destroy(BaseActivity activity) { int size = list.size(); for (int i = 0; i < size; i++) { SoftReference<BaseActivity> softReference = list.get(i); BaseActivity act = softReference.get(); if (act != null && act == activity) { list.remove(softReference); return; } } } private BaseActivity top() { int index = list.size() - 1; while (index >= 0) { SoftReference<BaseActivity> softReference = list.get(index); if (softReference.get() != null) { return softReference.get(); } else { index--; } } MyLog.e(TAG, "error,top is null"); return null; } private List<SoftReference<BaseActivity>> getList() { return list; } private static ActControl CONTROL = new ActControl(); public static void onResume(BaseActivity activity) { CONTROL.resume(activity); MyLog.d(TAG, "onResume size = " + CONTROL.getList().size()); } public static void onDestroy(BaseActivity activity) { CONTROL.destroy(activity); MyLog.d(TAG, "onDestroy size = " + CONTROL.getList().size()); } public static BaseActivity findExist(Class<?> cls) { return CONTROL.findExistInner(cls); } public static BaseActivity getTop() { return CONTROL.top(); } public BaseActivity findExistInner(Class<?> cls) { for (SoftReference<BaseActivity> ref : list) { final BaseActivity activity = ref.get(); if (activity != null && activity.getClass() == cls) return activity; } return null; }}
1 0
- Android 完全退出 App,Activity管理者 (Exit)
- Android 完美退出 App (Exit)
- Android 完美退出 App (Exit)
- Android 完美退出 App (Exit)
- Android 完美退出 App (Exit)
- Android 完美退出 App (Exit)
- android 完全退出App
- android完全退出(关闭所有Activity)
- android开发完全退出activity
- Android完全退出程序,退出所有Activity
- Android App完全退出方式
- Android如何完全退出app
- Android完全结束Activity并退出程序
- Android完全结束Activity并退出程序
- android完全退出之结束全部Activity
- Android完全退出多个activity程序
- Android完全退出多个activity程序
- Android完全退出多个activity程序
- 106-vs插件resharper的下载安装和破解
- Azure Blob Storage 基本用法 -- Azure Storage 之 Blob
- python 定时退出 1分钟后报警又开启
- linux图形系统框架
- Android N 多窗口支持
- Android 完全退出 App,Activity管理者 (Exit)
- 模拟面试题
- [rnn]BPTT_梯度消失/爆炸问题
- git 查看生成对象
- Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法
- FOF管理系列之二:FOF好在哪儿?
- 呼叫中心能为企业带来多少益处
- 仿 Cuto 壁纸应用的加载动画
- PHP内部执行JavaScript代码