Android退出程序

  通常一个Android程序会对应多个activity,对于结束一个activity,通常我们会想到使用finish(),finish仅仅是针对activity的,它只是将活动推向后台,并没有立即释放内存,资源并没有被清理。例如A—〉B(由A窗口打开B窗口),如果在B中调用finish(),只是将B窗口关闭了,这时候会显示A窗口。那么如何退出整个程序呢?

一、Dalvik VM的本地方法

1. android.os.Process.killProcess(android.os.Process.myPid())    //获取PID , 杀死进程

2. System.exit(0);   //常规java、c#的标准退出法,返回值为0代表正常退出  

public void exitProgrames() {

        Intent startMain = new Intent(Intent.ACTION_MAIN);
        startMain.addCategory(Intent.CATEGORY_HOME);
        startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(startMain);
        android.os.Process.killProcess(android.os.Process.myPid());
        //或者 System.exit(0);
    }

二、任务管理器方法

  前提:Android 1.5 API Level为3以上

     需要权限:<uses-permission android:name="android.permission.RESTART_PACKAGES"></uses-  permission>

  代码:

ActivityManager actManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
actManager.restartPackage(getPackageName());

三、自定义实现管理Activity

//单例模式管理activity
public class ActivityManger {

    List<Activity> activityList = new LinkedList<Activity>();
    private static ActivityManger instance;
    
    public ActivityManger getInstance(){
        
        if(instance == null){
            instance = new ActivityManger();
        }
        return instance;
    }
    
    //添加activity
    public void addActivity(Activity activity){
        activityList.add(activity);
    }
    
    //遍历关闭每一个activity
    public void exit(){
        
        for(Activity activity: activityList){
            activity.finish();
        }
    }
}

四、通过 Intent.FLAG_ACTIVITY_CLEAR_TOP

  A打开B 时,在Intent中加入标志 Intent.FLAG_ACTIVITY_CLEAR_TOP

ntent intent = new Intent();
intent.setClass(A.this, B.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  //设置FLAG
startActivity(intent); 

  B启动时,将会清除该进程空间的所有Activity。

原文地址:https://www.cnblogs.com/xuepeng0521/p/4434207.html