Android 完全退出

原创
2013/02/09 21:27
阅读数 3.4K
    在Android开发过程中,经常有Activity 忘记finish了,退出后,再启动时,就会跳转到未结束的Activity。所以我在自己写的Application中加了一个方法。
package xidian.wwf.app;

import java.util.ArrayList;
import java.util.List;

import xidian.wwf.R;  import android.app.Activity;
import android.app.Application;


/**
 * 应用配置类
 * @author WWF
 *
 */
public class AppManager extends Application{
	/**打开的activity**/
	private List<Activity> activities = new ArrayList<Activity>();
	/**应用实例**/
	private static AppManager instance;
	/**
	 * 	获得实例
	 * @return
	 */
	public static AppManager getInstance(){
		return instance;
	}
	/**
	 * 新建了一个activity
	 * @param activity
	 */
	public void addActivity(Activity activity){
		activities.add(activity);
	}	
	/**
	 * 	结束指定的Activity
	 * @param activity
	 */
	public void finishActivity(Activity activity){
		if (activity!=null) {
			this.activities.remove(activity);
			activity.finish();
			activity = null;
		}
	}	
	/**
	 * 应用退出,结束所有的activity
	 */
	public void exit(){
		for (Activity activity : activities) {
			if (activity!=null) {
				activity.finish();
			}
		}
		System.exit(0);
	}		
	
	@Override
	public void onCreate() {
            instance = this;           
	}		
}

    然后我写了一个BaseActivity,以后的Activity 都继承这个Activity,如下

   

package xidian.wwf.activity;

import xidian.wwf.app.AppConfig;
import xidian.wwf.app.AppManager;
import android.app.Activity;
import android.os.Bundle;
import android.os.StrictMode;

/**
 * 基本Activity
 * @author WWF
 * @date 2013-1-26 下午6:24:47
 * @version
 */
public class BaseActivity extends Activity{
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//添加到Activity集合
		AppManager.getInstance().addActivity(this);
		//手机端SDK>10,即 android 2.3.x之后在主线程中访问网络需要加入如下代码
		if (AppConfig.getSDKVersionNumber()>10) {
	        // 详见StrictMode文档
	        StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
	                .detectDiskReads()
	                .detectDiskWrites()
	                .detectNetwork()   // or .detectAll() for all detectable problems
	                .penaltyLog()
	                .build());
	        StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
	                .detectLeakedSqlLiteObjects()
	                .detectLeakedClosableObjects()
	                .penaltyLog()
	                .penaltyDeath()
	                .build());
		}
	}
	
	@Override
	public void onBackPressed() {
		super.onBackPressed();
		onDestroy();
	}
	
	@Override
	protected void onDestroy() {
		super.onDestroy();
		//结束Activity&从集合中移除
		AppManager.getInstance().finishActivity(this);
	}

}

展开阅读全文
加载中
点击加入讨论🔥(5) 发布并加入讨论🔥
5 评论
53 收藏
0
分享
返回顶部
顶部