android 退出系统的解决办法
来源:互联网 发布:乐视2pro相机优化 编辑:程序博客网 时间:2024/06/06 01:37
我们都知道,Activity是存放在栈中。在默认的情况下(standard)Activity在栈中是以先进后出、后进先出的方式进行存放。最开始出现的Activity会存在栈底,最新启动的Activity总是会存在栈顶。当我们开启的Activity越来越多,当前想在某个界面退出当前应用程序的时候,或者双击返回键退出当前应用程序。这个时候只能一个一个的把当前所有启动的Activity销毁,直到清空栈中的所有Activity,应用程序才能退出
销毁所有Activity,退出应用程序常见的方式有下面四种:
(1) System.exit(0) 使用系统的方法,强制退出
(2) 抛出异常,强制退出
(3) 使用Application退出
(4) 使用广播退出
我在项目中使用第三种方式,在全局Application类中用一个List存放所有的Activity,退出时对所有的Activity使用finish()….。activity.finish();
下面给出具体的用法
1.创建一个MyApplication类,继承Application,在AndroidManifest.xml的application节点的
<application android:name=".MyApplication" ....此处是其他配置.... />
public class MyApplication extends Application { //用于存放所有启动的Activity的集合 private List<Activity> activityList; @Override public void onCreate() { super.onCreate(); activityList = new ArrayList<Activity>(); } /** * 添加Activity */ public void addActivity(Activity activity) { // 判断当前集合中不存在该Activity if (!activityList.contains(activity)) { activityList.add(activity);//把当前Activity添加到集合中 } } /** * 销毁单个Activity */ public void removeActivity(Activity activity) { //判断当前集合中存在该Activity if (activityList.contains(activity)) { activityList.remove(activity);//从集合中移除 activity.finish();//销毁当前Activity } } /** * 销毁所有的Activity */ public void removeALLActivity() { //通过循环,把集合中的所有Activity销毁 for (Activity activity : activityList) { activity.finish(); } }}
2.创建一个BaseActivity类,应用中所有的Activity都继承这个基类,在BaseActivity中添加一下方法
public class BaseActivity extends Activity { private MyApplication application; private BaseActivity oContext; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (application == null) { // 得到Application对象 application = (MyApplication) getApplication(); } oContext = this;// 把当前的上下文对象赋值给BaseActivity addActivity();// 调用添加方法 } // 添加Activity方法 public void addActivity() { application.addActivity(oContext);// 调用myApplication的添加Activity方法 } //销毁当个Activity方法 public void removeActivity() { application.removeActivity(oContext);// 调用myApplication的销毁单个Activity方法 } //销毁所有Activity方法 public void removeALLActivity() { application.removeALLActivity();// 调用myApplication的销毁所有Activity方法 }}
3.在有退出操作的Activity类中调用removeALLActivity()方法即可
//退出系统private long exitTime = 0;@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { if((System.currentTimeMillis()-exitTime) > 2000){ Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); exitTime = System.currentTimeMillis(); }else{ removeALLActivity();//此处调用BaseActivity中的方法释放所有activity finish(); System.exit(0); } return true; } return super.onKeyDown(keyCode, event);}
阅读全文
0 0
- android 退出系统的解决办法
- Android双击退出及bug的解决办法
- android退出系统的绝杀方法
- android如何退出系统
- android系统退出
- android退出系统
- Android之退出系统
- android完全退出程序的N种解决办法
- GetOpenFileName异常退出的解决办法
- android系统退出代码实现
- Android开发之系统退出
- android 如何退出整个系统
- Android 一键退出系统
- Android点击MENU弹出的退出按钮退出系统方法及拦截MENU弹出菜单方法
- DedeCMS系统php5.4环境下登录退出后台空白的解决办法说明
- android studio全屏退出不了解决办法
- Android开发:友盟推送多次重复打开页面,退出时得多次退出才能退出的解决办法(浅显方法)
- Android程序的退出
- MyEclipse 10破解方法及下载地址
- vue动画
- javaEE中的spring配置笔记
- 每天一python 题 0000
- Xamarin.Form 弹出自定义对话框
- android 退出系统的解决办法
- 数据库:事务
- mysql触发器作用及用法
- 处理vue渲染前的显示问题
- UVA 323 Jury Compromise——01背包变形
- codility CountSemiprimes
- 欢迎使用CSDN-markdown编辑器
- MyBatis --- 动态SQL、缓存机制
- 图片加载神器之Fresco,基于各种使用场景的讲解