Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 完全退出應用

Android 完全退出應用

編輯:關於Android編程

在做項目的時候會碰到應用無法完全退出的問題,網上搜索了一下,比較流行的是將每個activity加到一個棧裡面,退出的時候清空這個棧。下面給出一個完整的類,包含相應的方法,需要用的時候直接調用即可。

在每個activity內實例化一個對象,然後通過addActivity()方法 將每個activity壓入到棧內。在需要退出的時候調用exit()方法

大家需要用的時候可以直接拷貝以下代碼,修改一下類名即可

比如我要將activity入棧只需要MyApplication.getInstance().addActivity(activity)

退出直接調用MyApplication.getInstance().exit()或其他方法

public class MyApplication extends Application {
	public List mGetGoldCoinsFragments;
	public long mLoginTime;
	private static MyApplication instance;
	private static final String tag = "myApplication";

	private static Context appContext;

	// 判斷Home Activity是否為Stop狀態
	private final List activityList = new LinkedList();

	private long mExitTime;

	public static MyApplication getInstance() {
		if (null == instance) {
			instance = new MyApplication();
		}
		return instance;

	}

	/**
	 * 添加Activity到容器中
	 * 
	 * @param activity
	 */
	public void addActivity(Activity activity) {
		activityList.add(activity);
	}

	/**
	 * 遍歷所有的Activity並finish
	 * 
	 * @param isDirectExit
	 *            isDirectExit 是否直接退出
	 */
	public void exit(boolean isDirectExit) {
		if ((System.currentTimeMillis() - mExitTime) > 2000) {
			Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
			mExitTime = System.currentTimeMillis();

		} else {
			if (isDirectExit) {

				// 退出其它應用
				for (Activity activity : activityList) {
					Log.i(tag,
							"activity.getPackageName(): "
									+ activity.getPackageName());
					if (!(activity.isFinishing())) {
						activity.finish();
					}
				}
				activityList.clear();

				// 停止日志服務
				Log.d(tag, "stopping log srvice");

				// 判斷sdk版本
				int sdkVersion = Integer.parseInt(VERSION.SDK);
				if (sdkVersion >= 8) {
					android.os.Process.killProcess(android.os.Process.myPid());
				} else {
					ActivityManager activityMgr = (ActivityManager) this
							.getSystemService(ACTIVITY_SERVICE);
					activityMgr.restartPackage(getPackageName());
				}
				// 跳轉到桌面
				Intent intent = new Intent(Intent.ACTION_MAIN);
				intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
				intent.addCategory(Intent.CATEGORY_HOME);
				startActivity(intent);
				System.exit(0);

			} else {
				exit();
			}
		}
	}

	/**
	 * 遍歷所有的Activity並finish
	 */
	public void exit() {
		if ((System.currentTimeMillis() - mExitTime) > 2000) {
			Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
			mExitTime = System.currentTimeMillis();

		} else {

			// 退出其它應用
			for (Activity activity : activityList) {
				Log.i(tag, "activity.getPackageName(): "
						+ activity.getClassLoader().getClass().getName());
				// if (!(activity.isFinishing())) {
				activity.finish();
				// }
			}
			activityList.clear();

			// 停止日志服務
			Log.d(tag, "stopping log srvice");

			// 判斷sdk版本
			int sdkVersion = Integer.parseInt(VERSION.SDK);
			if (sdkVersion >= 8) {
				android.os.Process.killProcess(android.os.Process.myPid());
			} else {
				ActivityManager activityMgr = (ActivityManager) this
						.getSystemService(ACTIVITY_SERVICE);
				activityMgr.restartPackage(getPackageName());
			}

			// 跳轉到桌面
			Intent intent = new Intent(Intent.ACTION_MAIN);
			intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
			intent.addCategory(Intent.CATEGORY_HOME);
			startActivity(intent);

			System.exit(0);
		}
	}

	/**
	 * 返回桌面
	 */
	public void backToHome() {

		// 跳轉到桌面
		Intent intent = new Intent(Intent.ACTION_MAIN);
		intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		intent.addCategory(Intent.CATEGORY_HOME);
		startActivity(intent);
	}

	/**
	 * 從容器中刪除Activity
	 * 
	 * @param activity
	 */
	public void removeActivity(Activity activity) {
		activityList.remove(activity);
	}

	/**
	 * 清除所有Activity
	 */
	public void removeAllActivity() {
		// 退出其它應用
		for (Activity activity : activityList) {
			Log.i(tag, "activity.getPackageName(): "
					+ activity.getClassLoader().getClass().getName());
			// if (!(activity.isFinishing())) {
			activity.finish();
			// }
		}
		activityList.clear();
	}

	/**
	 * 判斷容器中是否存在這個Activity
	 * 
	 * @param activity
	 * @return
	 */
	public boolean isActivityContain(Activity activity) {
		return activityList.contains(activity);
	}

	@Override
	public void onCreate() {
		super.onCreate();
		appContext = getApplicationContext();
	}

}



  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved