android彻底退出应用_android程序完全退出,销毁所有activity方法

原文: http://blog.sina.com.cn/s/blog_6f6ea9d90101a8ad.html

这个问题一直困扰着我,试了n种方式,都不行,在网上搜了一圈,没有能用的: 1.ActivityManager manager = (ActivityManager)

context.getSystemService(Context.ACTIVITY_SERVICE); manager.killBackgroundProcesses(package); 不行 2.android.os.Process.killProcess(android.os.Process.myPid()); 也不行 3.manager.restartPackage(package); 还是不行 4. Intent MyIntent = new

Intent(Intent.ACTION_MAIN); MyIntent.addCategory(Intent.CATEGORY_HOME); startActivity(MyIntent); finish(); 这个只是退回到桌面,如果打开多个Activity关闭重新打开也会有问题,还是还是不行 看到有说广播机制,发现是个好东东,能彻底解决这个问题,废话不说看代码:

Java代码

public abstract class EnterActivity extends BaseActivity {

...

// 写一个广播的内部类,当收到动作时,结束activity

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

unregisterReceiver(this); // 这句话必须要写要不会报错,不写虽然能关闭,会报一堆错

((Activity) context).finish();

}

};

@Override

public void onResume() {

super.onResume();

// 在当前的activity中注册广播

IntentFilter filter = new IntentFilter();

filter.addAction(Attribute.PAGENAME);

registerReceiver(this.broadcastReceiver, filter); // 注册

}

public void close() {

Intent intent = new Intent();

intent.setAction(Attribute.PAGENAME); // 说明动作

sendBroadcast(intent);// 该函数用于发送广播

finish();

}

...

}

别人写的缺了个地方(unregisterReceiver)这个必须要加,找了个最简单的方法

用了这个方式,觉得很赞。但是自己的程序报了几个错误。解决方法记录如下:

首先,在你要退出程序的相应方法里面调用

getApplicationContext().sendBroadcast(new Intent("finish"));

发送广播。

1. Activity has leaked

IntentReceiver  that was

originally registered here. Are you missing a call to

unregisterReceiver()?

注册了广播接收器后要在销毁时取消注册,否则会出错。

@Override

protected void onDestroy() {

// 删除广播注册

getApplicationContext().unregisterReceiver(mFinishReceiver);

super.onDestroy();

}

2.会报 receiver is not registered。或者空指针异常。

用getApplicationContext()注册,用getApplicationContext()删除。而不能直接unregisterReceiver(mFinishReceiver);和registerReceiver(mFinishReceiver,

filter);有可能找不到。

@Override

public void onResume() {

super.onResume();

// 注册广播接收器

IntentFilter filter = new IntentFilter();

filter.addAction("finish");

getApplicationContext().registerReceiver(mFinishReceiver,

filter);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值