下文来自:
http://blog.youkuaiyun.com/sgl870927/archive/2011/03/27/6281971.aspx
--------------------------------------------------------------------------------------------------
在一个项目中,要退出android程序,试了restartPackage、 killBackgroundProcesses 、通过异常并在Application的子类中重新注册Thread的 Thread.UncaughtExceptionHandler接口+异常方式,等等,都没有效果。
最后发现 其实只要在从一个activity A 跳到另一个activity B 时,调用了A的finish方法,程序就能退出,但这样不能实现Back操作了,最后想一个办法: 我们为什么不自己控制程序创建的activity呢?比如我们可以把程序创建的avtivity放在一个全局变量里,在退出程序的时候取出每个还存在的activity,并对每个activity依次调用finish最后程序就正常退出了。
先做以下几点说明:
private static Stack<Activity> activityStack;
private static ActivityManager instance;
}
if (instance == null) {
instance = new ActivityManager();
}
return instance;
}
public void popActivity(Activity activity) {
if (activity != null) {
activity.finish();
activityStack.remove(activity);
activity = null;
}
}
public Activity currentActivity() {
Activity activity = null;
if(!activityStack.empty())
activity= activityStack.lastElement();
return activity;
}
public void pushActivity(Activity activity) {
if (activityStack == null) {
activityStack = new Stack<Activity>();
}
activityStack.add(activity);
}
public void popAllActivityExceptOne(Class cls) {
while (true) {
Activity activity = currentActivity();
if (activity == null) {
break;
}
if (activity.getClass().equals(cls)) {
break;
}
popActivity(activity);
}
}
}
private HttpClient httpClient;//采用apache网络连接组件
private ActivityManager activityManager = null;
}
return activityManager;
}
this.activityManager = activityManager;
}
public void onCreate() {
httpClient = createHttpClient();
activityManager = ActivityManager.getScreenManager();
}
public void onLowMemory() {
super.onLowMemory();
shutdownHttpClient();
}
public void onTerminate() {
super.onTerminate();
shutdownHttpClient();
}
if (httpClient != null && httpClient.getConnectionManager() != null) {
httpClient.getConnectionManager().shutdown();
}
}
Log.d(TAG, "createHttpClient()...");
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
HttpProtocolParams.setUseExpectContinue(params, true);
schReg.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
schReg.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
ClientConnectionManager connectionManager = new ThreadSafeClientConnManager(params, schReg);
return new DefaultHttpClient(connectionManager, params);
}
if (httpClient != null) {
return httpClient;
} else {
return createHttpClient();
}
}
super.onCreate(savedInstanceState);
ApplicationEx application = (ApplicationEx) this.getApplication();
application.getActivityManager().pushActivity(this);
}
@Override
public void onBackPressed() {
super.onBackPressed();
ApplicationEx application = (ApplicationEx) getApplication();
application.getActivityManager().popActivity(this);
}
}
在android 2.1以上的版本都能实现Activity的完全退出。