標籤:
通常一個Android程式會對應多個activity,對於結束一個activity,通常我們會想到使用finish(),finish僅僅是針對activity的,它只是將活動推向後台,並沒有立即釋放記憶體,資源並沒有被清理。例如A—〉B(由A視窗開啟B視窗),如果在B中調用finish(),只是將B視窗關閉了,這時候會顯示A視窗。那麼如何退出整個程式呢?
一、Dalvik VM的本地方法
1. android.os.Process.killProcess(android.os.Process.myPid()) //擷取PID , 殺死進程
2. System.exit(0); //常規java、c#的標準退出法,傳回值為0代表正常退出
public void exitProgrames() { Intent startMain = new Intent(Intent.ACTION_MAIN); startMain.addCategory(Intent.CATEGORY_HOME); startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(startMain); android.os.Process.killProcess(android.os.Process.myPid()); //或者 System.exit(0); }
二、工作管理員方法
前提:Android 1.5 API Level為3以上
需要許可權:<uses-permission android:name=\"android.permission.RESTART_PACKAGES\"></uses- permission>
代碼:
ActivityManager actManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);actManager.restartPackage(getPackageName());
三、自訂實現管理Activity
//單例模式管理activitypublic class ActivityManger { List<Activity> activityList = new LinkedList<Activity>(); private static ActivityManger instance; public ActivityManger getInstance(){ if(instance == null){ instance = new ActivityManger(); } return instance; } //添加activity public void addActivity(Activity activity){ activityList.add(activity); } //遍曆關閉每一個activity public void exit(){ for(Activity activity: activityList){ activity.finish(); } }}
四、通過 Intent.FLAG_ACTIVITY_CLEAR_TOP
A開啟B 時,在Intent中加入標誌 Intent.FLAG_ACTIVITY_CLEAR_TOP
ntent intent = new Intent();intent.setClass(A.this, B.class);intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //設定FLAGstartActivity(intent);
B啟動時,將會清除該進程空間的所有Activity。
Android退出程式