Android 完全退出應用
在做項目的時候會碰到應用無法完全退出的問題,網上搜尋了一下,比較流行的是將每個activity加到一個棧裡面,退出的時候清空這個棧。下面給出一個完整的類,包含相應的方法,需要用的時候直接調用即可。
在每個activity內執行個體化一個對象,然後通過addActivity()方法 將每個activity壓入到棧內。在需要退出的時候調用exit()方法
大家需要用的時候可以直接拷貝以下代碼,修改一下類名即可
比如我要將activity入棧只需要MyApplication.getInstance().addActivity(activity)
退出直接調用MyApplication.getInstance().exit()或其他方法
public class MyApplication extends Application {public List mGetGoldCoinsFragments;public long mLoginTime;private static MyApplication instance;private static final String tag = "myApplication";private static Context appContext;// 判斷Home Activity是否為Stop狀態private final List activityList = new LinkedList();private long mExitTime;public static MyApplication getInstance() {if (null == instance) {instance = new MyApplication();}return instance;}/** * 添加Activity到容器中 * * @param activity */public void addActivity(Activity activity) {activityList.add(activity);}/** * 遍曆所有的Activity並finish * * @param isDirectExit * isDirectExit 是否直接退出 */public void exit(boolean isDirectExit) {if ((System.currentTimeMillis() - mExitTime) > 2000) {Toast.makeText(this, "再按一次退出程式", Toast.LENGTH_SHORT).show();mExitTime = System.currentTimeMillis();} else {if (isDirectExit) {// 退出其它應用for (Activity activity : activityList) {Log.i(tag,"activity.getPackageName(): "+ activity.getPackageName());if (!(activity.isFinishing())) {activity.finish();}}activityList.clear();// 停止Log ServiceLog.d(tag, "stopping log srvice");// 判斷sdk版本int sdkVersion = Integer.parseInt(VERSION.SDK);if (sdkVersion >= 8) {android.os.Process.killProcess(android.os.Process.myPid());} else {ActivityManager activityMgr = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);activityMgr.restartPackage(getPackageName());}// 跳轉到案頭Intent intent = new Intent(Intent.ACTION_MAIN);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.addCategory(Intent.CATEGORY_HOME);startActivity(intent);System.exit(0);} else {exit();}}}/** * 遍曆所有的Activity並finish */public void exit() {if ((System.currentTimeMillis() - mExitTime) > 2000) {Toast.makeText(this, "再按一次退出程式", Toast.LENGTH_SHORT).show();mExitTime = System.currentTimeMillis();} else {// 退出其它應用for (Activity activity : activityList) {Log.i(tag, "activity.getPackageName(): "+ activity.getClassLoader().getClass().getName());// if (!(activity.isFinishing())) {activity.finish();// }}activityList.clear();// 停止Log ServiceLog.d(tag, "stopping log srvice");// 判斷sdk版本int sdkVersion = Integer.parseInt(VERSION.SDK);if (sdkVersion >= 8) {android.os.Process.killProcess(android.os.Process.myPid());} else {ActivityManager activityMgr = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);activityMgr.restartPackage(getPackageName());}// 跳轉到案頭Intent intent = new Intent(Intent.ACTION_MAIN);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.addCategory(Intent.CATEGORY_HOME);startActivity(intent);System.exit(0);}}/** * 返回案頭 */public void backToHome() {// 跳轉到案頭Intent intent = new Intent(Intent.ACTION_MAIN);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.addCategory(Intent.CATEGORY_HOME);startActivity(intent);}/** * 從容器中刪除Activity * * @param activity */public void removeActivity(Activity activity) {activityList.remove(activity);}/** * 清除所有Activity */public void removeAllActivity() {// 退出其它應用for (Activity activity : activityList) {Log.i(tag, "activity.getPackageName(): "+ activity.getClassLoader().getClass().getName());// if (!(activity.isFinishing())) {activity.finish();// }}activityList.clear();}/** * 判斷容器中是否存在這個Activity * * @param activity * @return */public boolean isActivityContain(Activity activity) {return activityList.contains(activity);}@Overridepublic void onCreate() {super.onCreate();appContext = getApplicationContext();}}