MyApplication.getInstance().exit() 与onDestroy 、finish(),onKeyDown()的关系

因为我们有时候会用到全局变量application  

在一个activity启动的时候我们把 这个activity加入到 application中

MyApplication.getInstance().addActivity(this);

当我们退出的时候  比如onkeydown的时候用

MyApplication.getInstance().exit()   

这个代码也只会在程序的主activity中执行


首先我们是onKeyDown结束一个activity  这个时候如果直接调用MyApplication.getInstance().exit()

那么它会是这样执行的  会遍历所以加入的activity执行finish()


而finish执行的时候会执行一次ondestroy()


但是如果在单独的一个activity里面,ondestroy()就不会再被执行了,什么意思呢,


就是如果你有一些资源需要自己手动在程序退出的时候销毁掉或者断开  比如  与服务器的长连接   这个必须是自己手动断开的,也就是必须触发这个指令


那么这个代码就是在ondestroy()中执行的,


如果你直接在onkeyDown  也就是通常看见的连接点击退出程序的时候直接调用MyApplication.getInstance().exit() 就会出错了


当前的你调用的这个类中的ondestroy将不会被执行的

下面是onkeydown和ondestroy的执行顺序:

10-18 21:28:21.471: I/TAG(10652): 我是onkeydown
10-18 21:28:23.640: I/TAG(10652): 我是onDestroy


finish的执行顺序在他们之前


而我的程序是这样写的,在MainActivity中:


public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
Log.i("TAG", "我是onkeydown");
if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){
if(okToExit){
//如果连续点击就退出  退出之前先弹出提示 或者做点别的提示,类似暴风影音提示你再玩会儿把,
showback();
}

}

}


private void showback(){
AlertDialog.Builder builder = new Builder(MainActivity.this);
builder.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish();
}
});

}


protected void onDestroy() {
// TODO Auto-generated method stub
Log.i("TAG", "我是onDestroy");
BreakChatServe();
MyApplication.getInstance().exit();
super.onDestroy();
}


注意这个东西只存在于整个程序的主类中



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值