BroadcastReceiver 使用AlertDialog后 app奔溃了

2015-1-5 17:28:24     人阅读    

        具体情况如下,我现在有一个 BroadcastReceiver 的实现类,当接收到通知的时候我想通过  AlertDialog 进行提示,于是我写了如下的代码,在我运行的时候程序 app崩溃了,我怀疑 BroadcastReceiver 不支持 AlertDialog,请问有谁了解吗?
我的 BroadcastReceiver代码如下

public class ChargeFullReceiver extends BroadcastReceiver{
 
 @Override
 public void onReceive(Context context, Intent intent) {
  if("Battery.Service.Change.Full".equals(intent.getAction())){
   Log.d("ChargeFullReceiver", "before ChargeFullReceiver");
   AlertDialog.Builder builder = new AlertDialog.Builder(context);
   builder.setTitle("Warning");
   builder.setMessage("Charge complete");
   builder.setPositiveButton("OK", new DialogInterface.OnClickListener(){
    @Override
    public void onClick(DialogInterface dialog, int id){
     dialog.cancel();
    }
   });
   builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){
    @Override
    public void onClick(DialogInterface dialog, int id){
     dialog.cancel();
    }
   });
   builder.create();
   builder.show();
   Log.d("huangcx", "after ChargeFullReceiver");
  }
 }
}


我通过 Log在 BroadcastReceiver 中测试过,可以正确的进行展示,但是已使用  AlertDialog 就不行了,下面是Log的信息


Log.d("ChargeFullReceiver", "before ChargeFullReceiver");
备注上面的代码可以运行到,log里面也没看到其他的异常

处理方法

       AlertDialog 是UI操作,需要放到主线程里面弹出对话框,BroadcastReceiver 运行的线程是非主线程,不能进行展示,如果你想实现这种功能,可以让 BroadcastReceiver 给 主线程发信息,主线程接收后在弹出 AlertDialog 即可.

       BroadcastReceiver 接收后直接被系统kill掉,你在  BroadcastReceiver 弹出对话框后,onReceive 及接收,它就会被kill,就出现崩溃的问题了


原文地址:http://www.itmmd.com/201501/442.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

android shareSDK sso登录新浪和微信   上一篇
下一篇  Android KSOAP2调用.net webservice
精彩回复
我要追加问题,请求站长解决!
姓名:       

《程序员app》专门为程序员量身定做!