android程序徹底退出步驟

方法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   }
相關文章
相關標籤/搜索