Android 強制且徹底的退出app

方法1、使用MyApplication.java文件代碼如下:
package com.ss.zshcloud.utils;
import android.app.Activity;
import android.app.Application;
import java.util.LinkedList;
import java.util.List;
public class MyApplication extends Application { 


//用於將所有activity存在一起用於最後統一finish便於退出
private List<Activity> activityList = new LinkedList<Activity>(); 
private static MyApplication instance; 

private MyApplication() 



//單例模式中獲取唯一的MyApplication實例 
public static MyApplication getInstance() 

if(null == instance) 

instance = new MyApplication(); 

return instance; 

//添加Activity到容器中 
public void addActivity(Activity activity) 

activityList.add(activity); 

//遍歷所有Activity並finish 
public void exit() 

for(Activity activity:activityList) 
{


activity.finish(); 

System.exit(0); 


MyApplication.java
最後再MyApplication.getInstance().exit();方法可以退出那些簡單程序。
方法2、使用System.Exit(0),之前不關閉所有activity和service會重啓app。
方法3、使用SuUtil.java代碼如下:
package com.ss.zshcloud.utils;
import java.io.IOException;
import java.io.OutputStream;
public class SuUtil {
    private static Process process;
    /**
     * 結束進程,執行操作調用即可
     */
    public static void kill(String packageName) {
        initProcess();
        killProcess(packageName);
        close();
    }
  /**
     * 初始化進程
     */
    private static void initProcess() {
        if (process == null)
            try {
                process = Runtime.getRuntime().exec("su");
            } catch (IOException e) {
                e.printStackTrace();
            }
    }
    /**
     * 結束進程
     */
    private static void killProcess(String packageName) {
        OutputStream out = process.getOutputStream();
        String cmd = "am force-stop " + packageName + " \n";
        try {
            out.write(cmd.getBytes());
            out.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
  /**
     * 關閉輸出流
     */
    private static void close() {
        if (process != null)
            try {
                process.getOutputStream().close();
                process = null;
            } catch (IOException e) {
                e.printStackTrace();
            }
    }
}
SuUtil.java
調用SuUtil.kill(包名)會完全退出app,但該app需要設置root權限。
方法4、最後成功的方法
int currentVersion = android.os.Build.VERSION.SDK_INT;
Log.i("println","currentVersion:"+currentVersion+" android.os.Build.VERSION_CODES.ECLAIR_MR1:"+android.os.Build.VERSION_CODES.ECLAIR_MR1);
if (currentVersion > android.os.Build.VERSION_CODES.ECLAIR_MR1) {
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(startMain);
System.exit(0);
} else {// android2.1
ActivityManager am = (ActivityManager)mContext. getSystemService(Context.ACTIVITY_SERVICE);
am.restartPackage(mContext.getPackageName());
}
androidmanifest.xml方要添加權限:
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/> <uses-permission android:name="android.permission.RESTART_PACKAGES"/>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章