天天看點

我的Android進階之旅------>Android安全退出應用程式的幾種方式

我的Android進階之旅------>Android安全退出應用程式的幾種方式

當應用不再使用時,通常需要關閉應用,可以使用以下幾種方法關閉android應用:

第一種方法:首先擷取目前程序的id,然後殺死該程序。  建議使用這種方式

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

第二種方法:終止目前正在運作的Java虛拟機,導緻程式終止

System.exit(0);

或者

Runtime.getRuntime().exit(0);

第三種方法:強制關閉與該包有關聯的一切執行

android2.1之前

ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);

manager.restartPackage(getPackageName());

<!-- 添權重限 -->

<uses-permission android:name="android.permission.RESTART_PACKAGES" />

這種方法會終止一切和這個程式包關聯的,所有共享同一uid的process被kill,所有的activity會被removed,所有建立的服務會停止,還會發一個廣播Intent.ACTION_PACKAGE_RESTARTED導緻所有注冊alarms被stopped,notifications被removed。

android2.2之後

ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);

manager.killBackgroundProcesses("com.xawx.gd");   // API Level至少為8才能使用

是以要用此方法最好加個判斷,如果是2.2之前的ROM就用restartPackage,之後的就用killBackgroundProcesses。

<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />

==================================================================================================

第四種方式:抛出異常

原理:在程式遇到非檢查異常時,程式退被強制退出,那麼虛拟器也将會被關閉,

     是以利用一個非檢查異常,退出程式,但會遇到一個問題,就是強制退出的對話框的出現,是不是很惡心?

 其實沒有關系,可以不讓系統彈出對話框,看代碼

第五種方式:用一個集合自己管理activity

     當一個activity建立的時候,把執行個體傳遞到那個管理activity的集合裡,這個集合一般放在一個可全局通路的一個類内,最好那個類繼承Application,然後在menifest的<application>标簽的屬性name上加上自己寫的application類,這個類是單例的。退出的時候,周遊集合讓所有的activity

finish掉,最後調用關閉程序的那個方法

第六種方式:使用周遊的方式

  這種方式比較繁瑣複雜,使用遞歸的方式,沒當打開一個activity的時候都用startActivityForResult(),在onActivityResult()裡接收結果關閉目前的activity,不推薦使用,太繁瑣麻煩。

第七種方式:使用intent的flag實作

  原理:在android程式中,當打開一個activity的時候可以傳進去這樣一個flag

Activity.FLAG_ACTIVITY_CLEAR_TOP,當打開那個新的activity的時候,任務棧裡的所有activity将會被清空,最後隻剩下那個新的activity,然後在新的activity裡使用finish()把自己銷毀了就可以了。

  作者:歐陽鵬  歡迎轉載,與人分享是進步的源泉!

繼續閱讀