Android 退出应用程序
2016-11-10 17:49
302 查看
如何干净彻底地退出Android应用程序,如何干净地关闭所有已打开的Activity? 如何关闭指定的Activity? 如何关闭一类Activity?
搜索了一下,有以下一些
1. 任务管理器方法(ActivityManager)
首先要说明该方法运行在Android 1.5 API Level为3以上才可以,
系统会将,该包下的,所有进程,服务,全部杀掉
要注意加上权限
2. Dalvik VM的本地方法
killProcess( )需要添加权限
3.一种比较流行的Android退出方法
使用单例模式创建一个Activity管理对象,该对象中有一个Activity容器(具体实现自己处理,使用LinkedList等)专门负责存储新开启的每一个Activity,容易理解、易于操作。
我的代码就是使用第三种方法,通过创建一个 Activity界面管理工具类实现的。
在BaseActivity中添加
在点击退出程序的时候,执行
其他的关闭Activity方法网上相关的说明
finish():结束当前Activity,不会立即释放内存。遵循android内存管理机制。
exit():结束当前组件如Activity,并立即释放当前Activity所占资源。
killProcess():结束当前组件如Activity,并立即释放当前Activity所占资源。
restartPackage():结束整个App,包括service等其它Activity组件。
特别注意:
除了finish()方法可以调用Activity的生命周期方法如onStop()、onDestroy(),其余三种退出App均不会调用Activity的生命周期方法。除非,在调用这几个方法之前或者之后主动调用Activity的生命周期方法。如:
System.exit(int);
onDestroy();
搜索了一下,有以下一些
1. 任务管理器方法(ActivityManager)
首先要说明该方法运行在Android 1.5 API Level为3以上才可以,
系统会将,该包下的,所有进程,服务,全部杀掉
ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE); am.restartPackage(getPackageName());
要注意加上权限
<uses-permission android:name="android.permission.RESTART_PACKAGES\"></uses-permission>
2. Dalvik VM的本地方法
android.os.Process.killProcess(android.os.Process.myPid()) //获取PID
System.exit(0); //常规java、c#的标准退出法,返回值为0代表正常退出
killProcess( )需要添加权限
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES\"></uses-permission>
3.一种比较流行的Android退出方法
使用单例模式创建一个Activity管理对象,该对象中有一个Activity容器(具体实现自己处理,使用LinkedList等)专门负责存储新开启的每一个Activity,容易理解、易于操作。
我的代码就是使用第三种方法,通过创建一个 Activity界面管理工具类实现的。
package com.demo.android.model; import android.app.Activity; import com.demo.util.LogUtils; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * Activity界面管理工具 */ public final class ActivityManager { private static List<Activity> activities = new ArrayList<Activity>();// 普通Activity /** * 添加普通Activity * * @param activity */ public static void addActivity(Activity activity) { if (activities.contains(activity)) { removeActivity(activity); } activities.add(activity); LogUtils.debug("ActivityManager--enter", activity.getClass().getSimpleName()); } /** * 删除普通Activity * * @param activity */ public static void removeActivity(Activity activity) { activities.remove(activity); LogUtils.debug("ActivityManager--exit", activity.getClass().getSimpleName()); } /** * 结束普通Activity的栈顶的元素 * */ public static void getTopActivityAndFinish() { Activity top = activities.get(activities.size() - 1); removeActivity(top); top.finish(); } public static boolean isActivityTop(String name){ Activity top = activities.get(activities.size() - 1); return top.getClass().getSimpleName().equals(name); } /** * 结束当前之外的Activity */ public static void finishNotTopActivity(Activity top) { Iterator<Activity> iterator = activities.iterator(); while (iterator.hasNext()) { Activity activity = iterator.next(); if (top != activity) { iterator.remove(); activity.finish(); } } } /** * 结束所有activity */ public static void finishAllActivity() { Iterator<Activity> iterator = activities.iterator(); while (iterator.hasNext()) { Activity activity = iterator.next(); iterator.remove(); activity.finish(); } } public static void backToActivity(String toActivity) { List<Activity> needRemove = new ArrayList<Activity>(); for (int i = activities.size() - 1; i < activities.size(); i--) { if (i >= 0) { Activity activity = activities.get(i); if (toActivity.equals(activity.getClass().getSimpleName())) { break; } needRemove.add(activity); // removeActivity(activity); // activity.finish(); } } activities.removeAll(needRemove); // finish后对象销毁,确保上一步准确执行还是提出来做 for (Activity activity : needRemove) { activity.finish(); } } }
在BaseActivity中添加
public class BaseActivity extends AnActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityManager.addActivity(this); ..... } } @Override protected void onDestroy() { .... ActivityManager.removeActivity(this); super.onDestroy(); }
在点击退出程序的时候,执行
ActivityManager.finishAllActivity();
其他的关闭Activity方法网上相关的说明
finish():结束当前Activity,不会立即释放内存。遵循android内存管理机制。
exit():结束当前组件如Activity,并立即释放当前Activity所占资源。
killProcess():结束当前组件如Activity,并立即释放当前Activity所占资源。
restartPackage():结束整个App,包括service等其它Activity组件。
特别注意:
除了finish()方法可以调用Activity的生命周期方法如onStop()、onDestroy(),其余三种退出App均不会调用Activity的生命周期方法。除非,在调用这几个方法之前或者之后主动调用Activity的生命周期方法。如:
System.exit(int);
onDestroy();
相关文章推荐
- Android退出一个多Activity应用程序的方法
- 关于android 多个Activity应用程序按返回键退出程序问题
- Android 实现再按一次后退键退出应用程序
- 关于android应用程序使用ActivityManager退出的问题
- android 完全退出应用程序
- android 退出应用程序
- Android完全退出应用程序
- Android-完全退出当前应用程序的四种方法
- 实现android应用程序退出功能
- android完全退出应用程序的三种方式 .
- 如何退出Android应用程序
- android 再按一次后退键退出应用程序
- Android完全退出应用程序
- 如何退出Android应用程序
- Android 应用程序退出的四种方法
- Android完全退出应用程序
- android按back键彻底退出应用程序的方法
- Android安全退出多Activity与中止应用程序进程的探索
- Android完全退出应用程序的三种方法(转载)
- Android应用程序是否需要手动退出 好好看一下