編輯:關於Android編程
做過Android開發的人都知道,應用程序點擊返回鍵 或者 代碼顯示調用了Activity.finish()方法都無法完全退出,通過任務管理工具可以看到他們還在進程中。
下面我將分享 OSChina.NET Android版客戶端 完全退出程序的方法:
1. 添加權限
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
2. 導入AppManager工具類
AppManager類是一個自定義的工具類,作用是將應用程序所有啟動的Activity都添加到堆棧,最終退出應用程序時全部釋放掉Activity。
完整的AppManager類代碼:
[java]
package net.oschina.app;
import java.util.Stack;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
/**
* 應用程序Activity管理類
* @author liux
*/
public class AppManager {
private static Stack<Activity> activityStack;
private static AppManager instance;
private AppManager(){}
/**
* 單一實例
*/
public static AppManager getAppManager(){
if(instance==null){
instance=new AppManager();
}
return instance;
}
/**
* 添加Activity到堆棧
*/
public void addActivity(Activity activity){
if(activityStack==null){
activityStack=new Stack<Activity>();
}
activityStack.add(activity);
}
/**
* 獲取當前Activity(堆棧中最後一個壓入的)
*/
public Activity currentActivity(){
Activity activity=activityStack.lastElement();
return activity;
}
/**
* 結束當前Activity(堆棧中最後一個壓入的)
*/
public void finishActivity(){
Activity activity=activityStack.lastElement();
if(activity!=null){
activity.finish();
activity=null;
}
}
/**
* 結束指定的Activity
*/
public void finishActivity(Activity activity){
if(activity!=null){
activityStack.remove(activity);
activity.finish();
activity=null;
}
}
/**
* 結束指定類名的Activity
*/
public void finishActivity(Class<?> cls){
for (Activity activity : activityStack) {
if(activity.getClass().equals(cls) ){
finishActivity(activity);
}
}
}
/**
* 結束所有Activity
*/
public void finishAllActivity(){
for (int i = 0, size = activityStack.size(); i < size; i++){
if (null != activityStack.get(i)){
activityStack.get(i).finish();
}
}
activityStack.clear();
}
/**
* 退出應用程序
*/
public void AppExit(Context context) {
try {
finishAllActivity();
ActivityManager activityMgr= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
activityMgr.restartPackage(context.getPackageName());
System.exit(0);
} catch (Exception e) { }
}
}
3. 使用AppManager工具類
Activity啟動時,在的onCreate方法裡面,將該Activity實例添加到AppManager的堆棧
AppManager.getAppManager().addActivity(this);
需要退出程序時,調用
AppManager.getAppManager().AppExit(this);
· ·點此進入上篇: Android 學習(三)上: UI 控件 · · · · ·AnalogClock和DigitalClock // 獲得當前的時間,獲得小時和分鐘
在Android開發當中,經常需要用到定位功能,尤其是依賴於地理位置功能的應用,很多人喜歡使用百度地圖,高德地圖提供的sdk,開放API,但是在僅僅需要經緯度,或者城市,
當點擊登陸之後,怎麼把服務器端返回的數據,寫到指定的控件上尼?,在android怎麼實現尼?下面我們通過具體的代碼進行分析和實現,希望能對你
在業內,Android手機一直有著“越用越慢”的口碑。根據第三方的調研數據顯示,有77%的Android手機用戶承認自己曾遭遇過手機變慢的影響。他