Android 完全退出應用

來源:互聯網
上載者:User

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();}}



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.