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代码    收藏代码
  1. public abstract class EnterActivity extends BaseActivity  
  2. ...  
  3.     // 写一个广播的内部类,当收到动作时,结束activity  
  4.     private BroadcastReceiver broadcastReceiver new BroadcastReceiver()  
  5.         @Override  
  6.         public void onReceive(Context context, Intent intent)  
  7.             unregisterReceiver(this); // 这句话必须要写要不会报错,不写虽然能关闭,会报一堆错  
  8.             ((Activity) context).finish();  
  9.          
  10.     };  
  11.   
  12.     @Override  
  13.     public void onResume()  
  14.         super.onResume();  
  15.   
  16.         // 在当前的activity中注册广播  
  17.         IntentFilter filter new IntentFilter();  
  18.         filter.addAction(Attribute.PAGENAME);  
  19.         registerReceiver(this.broadcastReceiver, filter); // 注册  
  20.      
  21.   
  22.       
  23.     public void close()  
  24.         Intent intent new Intent();  
  25.         intent.setAction(Attribute.PAGENAME); // 说明动作  
  26.         sendBroadcast(intent);// 该函数用于发送广播  
  27.         finish();  
  28.      
  29. ...  
  30.  


别人写的缺了个地方(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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值