Android 退出應(yīng)用

app退出應(yīng)用,很多時候采用關(guān)閉當(dāng)前進程的方式:

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

System.exit(0);

經(jīng)測試發(fā)現(xiàn)這種方式不能正真退出進程,安卓系統(tǒng)在退出進程后會自動檢查應(yīng)用是否還有activity或service,如果有activity還在返回棧中或者service沒有退出的話,會重新開啟app,application的onCreate()方法會再次執(zhí)行,并且系統(tǒng)會試圖回到上一次退出時的activity。所以用這種方式不能完全退出應(yīng)用。

目前比較流行的做法是在application中registerActivityLifecycleCallbacks,自己創(chuàng)建activity的管理棧。退出時finish掉所有的activity,如果要徹底退出的話再關(guān)閉掉所有的seveice:

在application中:

private static ListmActivitys =Collections.synchronizedList(new LinkedList());

@Override

public void onCreate() {

super.onCreate();

?registerActivityListener();

}

private void registerActivityListener() {

registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {

@Override

? ? ? ? public void onActivityCreated(Activity activity,Bundle savedInstanceState) {

/**

? ? ? ? ? ? *? 監(jiān)聽到 Activity創(chuàng)建事件 將該 Activity 加入list

*/

? ? ? ? ? ? pushActivity(activity);

}

@Override

? ? ? ? public void onActivityStarted(Activity activity) {

}

@Override

? ? ? ? public void onActivityResumed(Activity activity) {

}

@Override

? ? ? ? public void onActivityPaused(Activity activity) {

}

@Override

? ? ? ? public void onActivityStopped(Activity activity) {

}

@Override

? ? ? ? public void onActivitySaveInstanceState(Activity activity,Bundle outState) {

}

@Override

? ? ? ? public void onActivityDestroyed(Activity activity) {

if (null ==mActivitys &&mActivitys.isEmpty()) {

return;

}

if (mActivitys.contains(activity)) {

/**

? ? ? ? ? ? ? ? *? 監(jiān)聽到 Activity銷毀事件 將該Activity 從list中移除

? ? ? ? ? ? ? ? */

? ? ? ? ? ? ? ? popActivity(activity);

}

}

});

}

/**

* @param activity 作用說明 :添加一個activity到管理里

*/

public void pushActivity(Activity activity) {

mActivitys.add(activity);

RYLogUtils.d(TAG,"activityList:size:" +mActivitys.size());

}

/**

* @param activity 作用說明 :刪除一個activity在管理里

*/

public void popActivity(Activity activity) {

mActivitys.remove(activity);

RYLogUtils.d(TAG,"activityList:size:" +mActivitys.size());

}

/**

* 結(jié)束所有Activity

*/

public static void finishAllActivity() {

if (mActivitys ==null) {

return;

}

for (Activity activity :mActivitys) {

activity.finish();

}

mActivitys.clear();

}

/**

* 退出應(yīng)用程序

*/

public void appExit() {

try {

RYLogUtils.e(TAG,"app exit");

finishAllActivity();

stopService(new Intent(this,xxxxx.class));

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

System.exit(0);

}catch (Exception e) {

}

}

這樣就可以完全退出app

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,119評論 25 709
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,355評論 0 17
  • Day1: 在代碼中通過R.string.hello_world可以獲得該字符串的引用; 在XML中通過@stri...
    冰凝雪國閱讀 1,646評論 0 5
  • 自從2012年10月從一覽辭職開始“創(chuàng)業(yè)”到現(xiàn)在,不到兩年的時間內(nèi)經(jīng)歷了4家雇主(帶自己5家):當(dāng)初為了一時解決溫...
    光華同學(xué)閱讀 491評論 0 51
  • 對于上班一年的菜鳥來說,關(guān)于阿諛奉承,左右逢源還是看不慣。 為什么選擇這個工作,是覺得想單純一些,少點套路。我不擅...
    小雀斑妹紙閱讀 858評論 1 2

友情鏈接更多精彩內(nèi)容