正文  基础知识 > 生命周期/运行原理 >

Android开发Activity忘记finish 没有完全退出的解决办法

退出后,再启动时,就会跳转到未结束的Activity...

在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);
}
 
}