退出activity以及结束应用程序的总结

        在写多个activity的时候,有时候会对其中的一些activity进行退出和返回的操作。

            程序中提供的activity.finish()这一方法仅仅只是将activity退出了堆栈,并没有实现应用程序的退出。而能够完全   的退出应用程序的方法有3种:

       第一种是使用killProcess()函数,首先获取当前进程的id,然后杀死该进程

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

这种方式虽然退出了应用程序,但是并不是完全的退出,它并没有将当前任务的任务栈进行清空,所以并不能完全的杀死应用程序的进程。

第二种是在activity的生命周期函数中添加如下的函数,强制关闭与该包有关联的一切执行

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

      am.restartPackage("packagename"); 

还需要在AndroidManifest.xml文件中加入如下的权限:

      <uses-permission android:name="android.permission.RESTART_PACKAGES" />

然而这种方式虽然可以杀死应用程序,但是却有个弊端,无法杀死自己的,只能杀死别人的。

第三种是在直接终止正在运行的java虚拟机,从而导致程序的终止,即:

       System.exit(0);

这种方法也是不会将自己的应用程序杀死的。

     在面对单个activity的时候这三个方法是可以使用并且有效的,但是当存在多个activity的时候,采用这些方法却可能并不能实现程序的退出,而是会停在某个activity上面,最后并没有结束程序和退出应用。面对这种情况,一般做的最多的处理就是通过单例模式的Application来存储新开启的activity最后通过它将所有的activity进行释放。

下面是单例的代码:

package com.example.util;

import java.util.LinkedList;
import java.util.List;

import android.app.Activity;
import android.app.Application;

public class ExitApplication extends Application {
    private List<Activity> activityList=new LinkedList<Activity>();
    private static ExitApplication instance;

    private ExitApplication(){
        
    }
    
    public static ExitApplication getInstance(){
        if(null==instance){
            instance=new ExitApplication();
        }
        return instance;
    }
    
    public void addActivity(Activity activity){
        activityList.add(activity);
        
    }
    
    public void exit(){
        for(Activity activity:activityList){
            activity.finish();
            
        }
        System.exit(0);
    }
}

在完成单例的工具类之后,在每一个activity的oncreate()方法中调用:

         ExitApplication.getInstance().addActivity(this); 

在执行关闭的方法中调用:

         ExitApplication.getInstance().exit();

这样就可以实现多个activity的关闭的管理和退出的功能。

当然对于多个activity的关闭也是还有其他的方法的,例如对于每个activity进行标记,然后在通过广播对标记的activity进行关闭这样也是可以实现多个activity的关闭的。所以能够实现的方法是比较的多的,只是单例模式的这个方法确实比较容易理解,操作也比较方法,所以个人比较推荐。

最后,由于本人刚刚开始接触android的开发,有错的地方希望大家多多谅解并且指出,大家相互交流,谢谢!




















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值