android 退出整个应用

如果是直接按home键退到桌面,并没有实际退出整个应用。Activity依然保存在栈中。那么,怎样才能关闭所有activity退出整个应用呢?那么想法当然是用一个集合吧所有的activity保存起来了。那么用什么呢?可以用List.用ArrayList还是用linkedList呢?因为这个List主要用于添加和删除。并不需要提供随机访问。因此,使用linkedList.

我们写一个类,注意这个类要用单例模式:

package cn.com.smartcost.offer.util;

import java.util.LinkedList; 
import java.util.List; 
import android.app.Activity; 
import android.app.Application; 
/**
 * 主要用于退出整个应用
 * 
 * @date 2014-1-3 10:55:10
 *
 */
public class SysApplication extends Application { 
    private List<Activity> mList = new LinkedList<Activity>(); 
    private static SysApplication instance; 
 
    private SysApplication() {   
    } 
    public synchronized static SysApplication getInstance() { 
        if (null == instance) { 
            instance = new SysApplication(); 
        } 
        return instance; 
    } 
    /**
     * 在需要退出的Activity的onCrete()方法 
     * @param activity
     */
    public void addActivity(Activity activity) { 
        mList.add(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(); 
    }  
}
在需要关闭的Activity的onCreate()方法中,使用:

SysApplication.getInstance().addActivity(this);

将activity添加到list中去。

在需要退出的地方:

	//捕捉按键
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if(keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0){
			if(count == 0){
				++count; //count+1,到1的时候退出应用
				Toast.makeText(LoginActivity.this, "再按一次返回键退出纵横材价",
						Toast.LENGTH_LONG).show();
			}
			if(count == 1){
				SysApplication.getInstance().exit();
			}
			return false;
		}
		//继续执行父类的其他点击事件
		return super.onKeyDown(keyCode, event);
	}

注意,system.exit(0)和Activity.finish()有什么不一样呢?

Activity.finish():

当你调用此方法的时候,系统只是将最上面的Activity移出了栈,并没有及时的调用onDestory()方法,其占用的资源也没有被及时释放。因为移出了栈,所以当你点击手机上面的“back”按键的时候,也不会找到这个Activity。

System.exit(0)
这玩意是退出整个应用程序的,是针对整个Application的。将整个进程直接KO掉。

Activity.onDestory()
the system is temporarily destroying this instance of the activity to save space.
系统销毁了这个Activity的实例在内存中占据的空间。
在Activity的生命周期中,onDestory()方法是他生命的最后一步,资源空间什么的都没有咯~~。当重新进入此Activity的时候,必须重新创建,执行onCreate()方法。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值