如何退出多個Activity

2021-06-16 21:47:12 字數 2079 閱讀 7745

對於單一activity的應用來說,退出很簡單,直接finish()即可。當然,也可以用killprocess()和system.exit()這樣的方法。

對於多個activity,1、記錄開啟的activity:每開啟乙個activity,就記錄下來。在需要退出時,關閉每乙個activity即可。2、傳送特定廣播:在需要結束應用時,傳送乙個特定的廣播,每個activity收到廣播後,關閉即可。3、遞迴退出:在開啟新的activity時使用startactivityforresult,然後自己加標誌,在onactivityresult中處理,遞迴關閉。為了程式設計方便,最好定義乙個activity基類,處理這些共通問題。

在2.1之前,可以使用activitymanager的restartpackage方法。

它可以直接結束整個應用。在使用時需要許可權android.permission.restart_packages。

注意不要被它的名字迷惑。

可是,在2.2,這個方法失效了。在2.2新增了乙個新的方法,killbackground processes(),需要許可權 android.permission.kill_background_processes。可惜的是,它和2.2的restartpackage一樣,根本起不到應有的效果。

另外還有乙個方法,就是系統自帶的應用程式管理裡,強制結束程式的方法,forcestoppackage()。它需要許可權android.permission.force_stop_packages。並且需要新增android:shareduserid="android.uid.system"屬性。同樣可惜的是,該方法是非公開的,他只能執行在系統程序,第三方程式無法呼叫。

因為需要在android.mk中新增local_certificate := platform。

而android.mk是用於在android原始碼下編譯程式用的。

從以上可以看出,在2.2,沒有辦法直接結束乙個應用,而只能用自己的辦法間接辦到。

現提供幾個方法,供參考:

1、拋異常強制退出:

該方法通過拋異常,使程式force close。

驗證可以,但是,需要解決的問題是,如何使程式結束掉,而不彈出force close的視窗。

2、記錄開啟的activity:

每開啟乙個activity,就記錄下來。在需要退出時,關閉每乙個activity即可。

3、傳送特定廣播:

在需要結束應用時,傳送乙個特定的廣播,每個activity收到廣播後,關閉即可。

4、遞迴退出

在開啟新的activity時使用startactivityforresult,然後自己加標誌,在onactivityresult中處理,遞迴關閉。

除了第乙個,都是想辦法把每乙個activity都結束掉,間接達到目的。但是這樣做同樣不完美。你會發現,如果自己的應用程式對每乙個activity都設定了nosensor,在兩個activity結束的間隙,sensor可能有效了。但至少,我們的目的達到了,而且沒有影響使用者使用。為了程式設計方便,最好定義乙個activity基類,處理這些共通問題。

另外自己看到別人的一些例子,通過使用下面的方法可以成功在主介面finish後推出所有開啟的activity

可以利用清理歷史棧的方法,來巧妙關閉所有activity,首先用乙個設定為不可見的activity a來啟動程式,這個activity a的作用只是用來墊棧底,只有啟動和退出程式才回用到這個activity,在你需要退出的時候,只要跳轉至這個activity a  

intent intent = new intent();

intent.setclass(b.this, a.class);     //b為你按退出按鈕所在的activity,其他的activity也類似操作

intent.setflags(intent.flag_activity_clear_top);  //最關鍵是這句

startactivity(intent);

intent.flag_activity_clear_top使得處於棧底的a發揮推土機的作用,從最底層把棧裡所有的activity都清理掉,再在自己的oncreate方法加一句finish結束自己,即可實現退出。不放心的話,可以在a的ondestroy方法中加上system.exit(0) ,連跳轉過程中的執行緒也可以終止的。

如何退出多個Activity

對於單一activity的應用來說,退出很簡單,直接finish 即可。當然,也可以用killprocess 和system.exit 這樣的方法。對於多個activity,1 記錄開啟的activity 每開啟乙個activity,就記錄下來。在需要退出時,關閉每乙個activity即可。2 傳送...

正確退出activity 如何退出Activity

當然,也可以用killprocess 和system.exit 這樣的方法。但是,對於多activity的應用來說,在開啟多個activity後,如果想在最後開啟的activity直接退出,上邊的方法都是沒有用的,因為上邊的方法都是結束乙個activity而已。當然,網上也有人說可以。就好像有人問,...

Activity完全退出

intent intent new intent intent.putextra exit exit 新增引數,這是退出的依據 intent.setclass menuactivity.this,loginactivity.class 跳轉到login介面,根據引數退出 intent.setflag...