Android开发,关闭所有activity的方法

接触Android开发没多久,最近开发一个项目,在进行Activity的退出时遇到一些问题——偶尔当出现覆盖的Activity时,使用System.Exit(0),虽然结束当前进程,但是并没有退出程序,而且显示另外一个Activity。

如:Activity A为登录Activity,退出登录跳转到主Activity B,在Activity B中退出登录,跳转到Activity A,但是并没有结束Activity B,再从Activity A跳转到Activity B,这时使用System.Exit(0),并没有退出程序,而是返回最开始的那个Activity B,因为这时Activity覆盖了。

为解决这个问题尝试了很多的方法,最后解决了问题:使用Activity队列,可能很多的大能应该都知道,写在这里为方便记忆同时帮助和我一样的才接触的人。


首先新建一个工具类SysApplication.java

/** 
 * 工具类 用来结束所有后台activity 
 * @author Stanny 
 * 
 */ 
public class SysApplication extends Application {
	//运用list来保存们每一个activity是关键  
    private List mList = new LinkedList();  
    //为了实现每次使用该类时不创建新的对象而创建的静态对象  
    private static SysApplication instance;   
    //构造方法  
    private SysApplication(){}  
    //实例化一次  
    public synchronized static SysApplication getInstance(){   
        if (null == instance) {   
            instance = new SysApplication();   
        }   
        return instance;   
    }   
    // add Activity    
    public void addActivity(Activity activity) {   
        mList.add(activity);   
    }   
    //关闭每一个list内的activity  
    public void exit() {   
        try {   
            for (Activity activity:mList) {   
                if (activity != null)   
                    activity.finish();   
            }   
        } catch (Exception e) {   
            e.printStackTrace();   
        } finally {   
            System.exit(0);   
        }   
    }   
    //杀进程  
    public void onLowMemory() {   
        super.onLowMemory();       
        System.gc();   
    }  
}


这个类有两个方法:

addActivity(),用于添加Activity进入队列,每次新建一个Activity时,都在onCreate()方法中执行一次添加,将Activity添加进队列

protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.act_baby_info);
		SysApplication.getInstance().addActivity(this);
		// 初始化控件
		initview();
	}

exit(),就是用于结束进程的方法,在需要结束时调用就可关闭所有的Activity

SysApplication.getInstance().exit();


希望能帮助到和我一样的人。


你可能感兴趣的:(Android基础开发)