本地广播管理器使用主活动未收到的警报
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了本地广播管理器使用主活动未收到的警报相关的知识,希望对你有一定的参考价值。
我已经实现了一个报警管理器,它工作得非常好,并且每15分钟触发一次。现在我想使用闹钟每隔15分钟调用一次MainActivity
方法。所以我使用本地广播公司到MainActivity
(知道这是我手机上运行的当前活动)来传输订单以启动方法。但问题是MainActivity
没有接收onReceive方法的数据。
报警
@Override
public void onReceive(Context context, Intent intent) {
cont = context;
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
wl.acquire();
String url = intent.getExtras().getString("url");
Log.w(TAG, "Service " + url);
new GetJSON_val(){
@Override
protected String[] doInBackground(String... url) {
Some Code...
@Override
protected void onPostExecute(String[] result) {
Some Code...
// I send the broadcast to main Activity
Log.e("sender", "Broadcasting message");
Intent intent = new Intent("custom-event-name");
intent.putExtra("message", "This is my message!");
LocalBroadcastManager.getInstance(cont).sendBroadcast(intent);
}
}
}
}.execute(url);
// End of alarm code
wl.release();
}
主要活动
@Override
public void onCreate(Bundle savedInstanceState) {
...
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
new IntentFilter("custom-event-name"));
...
}
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Get extra data included in the Intent
String message = intent.getStringExtra("message");
Log.e("receiver", "Got message: " + message);
}
};
本地广播器是在postExecute
方法的Alarm类中创建的。
答案
我认为问题是你在onReceive()
执行长时间运行的任务并访问相同的context
你永远不应该在其中执行长时间运行的操作(在考虑阻止接收器和被杀死的候选者之前,系统允许超时10秒)。
解
- 要么你使用goAsync()。
- 或者在任务完成后使用IntentService作为后台任务和sendBroadcast。
以上是关于本地广播管理器使用主活动未收到的警报的主要内容,如果未能解决你的问题,请参考以下文章