方法A:java
1.5版本到2.1版本的退出方法是android
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
activityManager.restartPackage("包名");
2.2版本必須把後臺數據清空了:c#
步驟1:
/**
* activityList:全部activity對象,用於退出時所有finish; Activity走onCreate時,添加到該集合
*/
public static List<Activity> activityList = new ArrayList<Activity>();
步驟2:
/**
* 頁面初始化
*
* @param savedInstanceState
*/
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
activityList.add(this);
步驟3:
/**
* 退出客戶端。
*
* @param context 上下文
*/
public static void exitClient(Context context)
{
Log.d(TAG, "----- exitClient -----");
// 關閉全部Activity
for (int i = 0; i < activityList.size(); i++)
{
if (null != activityList.get(i))
{
activityList.get(i).finish();
}
}
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
activityManager.restartPackage("包路徑");
System.exit(0);//Android的程序只是讓Activity finish()掉,而單純的finish掉,退出並不徹底
}
這裏要加System.exit(0);
還要記得加權限
<uses-permission android:name="android.permission.RESTART_PACKAGES" />this
方法B:spa
android.os.Process.killProcess(android.os.Process.myPid());rest
概括起來四種方法:code
Android程序有不少Activity,好比說主窗口A,調用了子窗口B,若是在B中直接finish(), 接下里顯示的是A。在B中如何關閉整個Android應用程序呢?本人總結了幾種比較簡單的實現方法。對象
1. Dalvik VM的本地方法blog
android.os.Process.killProcess(android.os.Process.myPid()) //獲取PID進程
System.exit(0); //常規java、c#的標準退出法,返回值爲0表明正常退出
2. 任務管理器方法
首先要說明該方法運行在Android 1.5 API Level爲3以上才能夠,同時須要權限
ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);
am.restartPackage(getPackageName());
系統會將,該包下的 ,全部進程,服務,所有殺掉,就能夠殺乾淨了,要注意加上權限
3. 根據Activity的聲明週期
咱們知道Android的窗口類提供了歷史棧,咱們能夠經過stack的原理來巧妙的實現,這裏咱們在A窗口打開B窗口時在Intent中直接加入標誌 Intent.FLAG_ACTIVITY_CLEAR_TOP,這樣開啓B時將會清除該進程空間的全部Activity。
在A窗口中使用下面的代碼調用B窗口
Intent intent = new Intent();
intent.setClass(Android123.this, CWJ.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //注意本行的FLAG設置
startActivity(intent);
接下來在B窗口中須要退出時直接使用finish方法便可所有退出。
4.自定義一個Actiivty 棧,道理同上,不過利用一個單例模式的Activity棧來管理全部Activity。並提供退出全部Activity的方法。代碼以下:
1 public class ScreenManager { 2 3 private static Stack activityStack; 4 5 private static ScreenManager instance; 6 7 private ScreenManager(){ 8 9 }10 11 public static ScreenManager getScreenManager(){12 13 instance=new ScreenManager();14 15 }16 17 return instance;18 19 }20 21 //退出棧頂Activity 22 23 public void popActivity(Activity activity){24 25 activity.finish();26 27 activityStack.remove(activity);28 29 activity=null;30 31 }32 33 }34 35 //得到當前棧頂Activity 36 37 public Activity currentActivity(){38 39 Activity activity=activityStack.lastElement();40 41 return activity;42 43 }44 45 //將當前Activity推入棧中 46 47 public void pushActivity(Activity activity){48 49 activityStack=new Stack();50 51 }52 53 activityStack.add(activity);54 55 }56 57 //退出棧中全部Activity 58 59 public void popAllActivityExceptOne(Class cls){60 61 while(true){62 63 Activity activity=currentActivity();64 65 break;66 67 }68 69 break;70 71 }72 73 popActivity(activity);74 75 }76 77 }78 79 }