我的BroadcastReceiver
没有被解雇的问题。这是接收者的定义:
public class UIUpdater extends BroadcastReceiver {
private final Handler handler;
public UIUpdater(Handler handler)
{
this.handler = handler;
}
@Override
public void onReceive(final Context context, final Intent intent)
{
String action = intent.getAction();
Log.i("MAIN", " >>> ACTION <<< : " + action);
if(action.equalsIgnoreCase("PROGRESSINIT"))
{
int size = intent.getIntExtra("PROGRESSSIZE", 0);
updatePopulateProgressSize(size);
}
handler.post(new Runnable(){
@Override
public void run(){
updatePopulateProgress(intent.getIntExtra("PROGRESS", 0));
}
});
}
}
这里是 Manifest :
<receiver android:name="com.goosesys.gaggle.Main$UIUpdater">
<intent-filter>
<action android:name="com.goosesys.gaggle.populate"/>
</intent-filter>
</receiver>
在这里我试图使用它:
JSONArray array = new JSONArray(xmppBack.getPayload());
Intent intent = new Intent(Constants.BC_POPULATE);
intent.setAction(Constants.BC_PROGRESSINIT);
intent.putExtra(Constants.BC_PROGRESSSIZE, array.length());
GaggleApplication.getContext().sendBroadcast(intent);
哦,常数:
public static final String BC_POPULATE = "com.goosesys.gaggle.populate";
public static final String BC_PROGRESSINIT = "PROGRESSINIT";
public static final String BC_PROGRESSSIZE = "PROGRESSSIZE";
public static final String BC_PROGRESSINC = "PROGRESSINC";
事情是,我已经逐步完成了每个部分,一切都很好,没有错误,没有泄漏,没有问题。只是onReceive
永远不会弹出:(
我是广播接收者的新手,请保持温和;)
提前干杯!
答案 0 :(得分:3)
如果你看过LogCat,你会发现一个警告或错误,堆栈跟踪抱怨Android无法创建UIUpdater
的实例。这有两个原因:
它不是static
内部类,因此框架无法创建它的实例(实例只能由外部Main
类实例创建)
它没有零参数构造函数,而且框架将使用什么
此外,对于像这样的常规系统广播,这不是一个很好的用例。请使用进程中的事件总线(LocalBroadcastManager
,Square&#t,Otto,greenrobot的EventBus等)。这将提高性能(无IPC),提高安全性(目前,任何人都可以破解您的接收器),并可能简化您的代码(如果您使用Otto或EventBus)。
答案 1 :(得分:0)
您需要在某处注册您的接收器。通常在onCreate方法中,我这样做:
registerReceiver(new UIUpdater(mhandler), new IntentFilter());