android彻底退出应用_Android退出应用程序方法总结

退出图

在Android开发中,我们运行了应用程序后,都需要退出应用的,那么该如何退出应用,又都有哪些实现方式呢?今天就为大家整理分享一些退出应用程序的方法,一起来看看吧!

更新内容

Ver:v1

任务管理器方法补充

新增监听式退出方法

Ver:v2

任务管理器方法修正

新增销毁任务栈退出方法

1. finish方法

finish();

该方法只是结束当前Activity,系统将最上面的Activity移出了栈,并没有清理占用的资源。如果栈内有很多Activity 的话,使用该方法显得有点捉襟见肘了,没办法一次移出全部Activity,并且没有立即释放内存,活动的资源也没有被清理。

2. 进程式

KillProcess():

可以杀死当前应用活动的进程,这一操作将会把所有该进程内的资源(包括线程全部清理掉)。当然,由于ActivityManager时刻监听着进程,一旦发现进程被非正常Kill,它将会试图去重启这个进程。

android.os.Process.killProcess(android.os.Process.myPid());

System.exit():

Java中结束进程的方法,调用它将关闭当前的JVM虚拟机。

System.exit(0);//正常退出

System.exit(1);//非正常退出

KillProcess() 和 System.exit(),许多人都使用过,当你栈里只有一个Activity的时候,这个措施是行之有效的。但当关闭多个Activity的时候,栈里有多个Activity时,这两个方法就不起作用了。

因为通过杀进程方式退出,会被系统认为异常退出,会保存应用的一些状态信息比如Activity运行栈,然后会恢复这个应用。当恢复一个Android应用程序时,会先从栈里面移除异常的Activity,相当于Back键操作。

3. 根据Activity的生命周期

Android的窗口类提供了历史栈,可以通过stack的原理来巧妙的实现。在A窗口打开B窗口的时候,在Intent中直接加入标识Intent.FLAG_ACTIVITY_CLEAR_TOP,这样开启B时,会清除该进程空间的所有Activity。

1)在A窗口中调用该方法跳转到B窗口:

Intent intent = new Intent();

intent.setClass(AActivity.this,BActivity.class);

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(intent);

2)在B窗口退出时直接使用 finish 方法即可全部退出

finish();

4. 任务管理器

系统将终止一切和这个程序包关联的,所有共享同一 uid 的 process全部杀掉,还会停止相关的服务,并且会发送一个广播。

ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);

am.restartPackage(getPackageName());

但是在 Android 2.2(API 8)之后,restartPackage方法已经过时,不可以将应用程序结束,需要使用ActivityManager类的killBackgroundProcesses方法。

ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);

am.killBackgroundProcesses(getPackageName());

System.exit(0);

注意事项:该方法虽然可以立即杀死与指定包相关联的所有后台进程,但是这些进程如果在将来某一时刻需要使用,便会重新启动。而且该方法只是结束后台进程的方法,不能结束当前应用移除所有的 Activity。如果需要退出应用,需要添加System.exit(0)方法一起使用,并且只限栈内只有一个Activity,如果有多个Activity时,正如上面 方法 2 所说,就不起作用了。

5. 任务栈式

利用一个单例模式的Activity栈来管理所有Activity

1)自定义 Application类,储存每一个Activity,并实现关闭所有Activity的操作

public class MyApplication extends Application {

private List activityList = new LinkedList();

private static MyApplication instance;

/**

*单例模式 1:

*/

private MyApplication() {

}

public static MyApplication getInstance() {

if(null == instance) {

instance = new MyApplication();

}

return instance;

}

@Override

public void onCreate() {

super.onCreate();

}

/**

*单例模式 2:

*/

// public static MyApplication getInstance() {

// return instance;

// }

// @Override

// public void onCreate() {

// super.onCreate();

// instance = this;

//

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值