這裡介紹兩種方法:一種把每個activity記住,然後逐一幹掉;另一種思路是使用廣播。
方法一、用list儲存activity執行個體,然後逐一幹掉
上代碼:
import java.util.LinkedList;import java.util.List;import android.app.Activity;import android.app.AlertDialog;import android.app.Application;import android.content.DialogInterface;import android.content.Intent;public class SysApplication extends Application {private List<Activity> mList = new LinkedList<Activity>();private static SysApplication instance;private SysApplication() {}public synchronized static SysApplication getInstance() { if (null == instance) { instance = new SysApplication(); } return instance; }// add Activitypublic void addActivity(Activity activity) { mList.add(activity);} public void exit() { try { for (Activity activity : mList) { if (activity != null) activity.finish(); } } catch (Exception e) { e.printStackTrace(); } finally { System.exit(0); }}@Overridepublic void onLowMemory() { super.onLowMemory(); System.gc();}}在每個Activity的onCreate方法中添加類似代碼:[java] public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SysApplication.getInstance().addActivity(this); } public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SysApplication.getInstance().addActivity(this); }在需要退出程式的時候,調用:SysApplication.getInstance().exit();SysApplication.getInstance().exit();簡而言之,通過單例模式把每個Activity 的引用添加到一個全域鏈表中,每次退出程式調用System.exit(0)時,先調用鏈表中Activity 的finish方法附:此方法也可參考連結:http://maosidiaoxian.iteye.com/blog/1404725
方法二、使用廣播
//2.2退出整個應用難免讓人困擾,曾經一度的嘗試一下方式:ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); manager.killBackgroundProcesses(package);//不行android.os.Process.killProcess(android.os.Process.myPid()); // 也不行manager.restartPackage(package); // 還是不行Intent MyIntent = new Intent(Intent.ACTION_MAIN); MyIntent.addCategory(Intent.CATEGORY_HOME); startActivity(MyIntent); finish();//這個只是退回到案頭,如果開啟多個Activity關閉重新開啟也會有問題,還是還是不行//看到有人說廣播機制,發現是個好東東,能徹底解決這個問題,廢話不說看代碼:public abstract class EnterActivity extends BaseActivity { ...// 寫一個廣播的內部類,當收到動作時,結束activity private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { unregisterReceiver(this); // 這句話必須要寫要不會報錯,不寫雖然能關閉,會報一堆錯 ((Activity) context).finish(); } }; @Override public void onResume() { super.onResume();// 在當前的activity中註冊廣播IntentFilter filter = new IntentFilter(); filter.addAction(Attribute.PAGENAME); registerReceiver(this.broadcastReceiver, filter); // 註冊}public void close() { Intent intent = new Intent(); intent.setAction(Attribute.PAGENAME); // 說明動作 sendBroadcast(intent);// 該函數用於發送廣播 finish(); } ... }別人寫的缺了個地方(unregisterReceiver)這個必須要加,不然會出一堆錯,找了個最簡單的方法。
本文學習時候收集於網路,只是不知道了源地址,感謝作者提供,還往作者見諒,大家一起學習!