我已经实现了一个报警管理器,它工作得非常好,每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
方法的报警类中创建的。
答案 0 :(得分:0)
我认为问题是您在onReceive()
执行长时间运行的任务并访问相同的context
你永远不应该在其中执行长时间运行的操作(在考虑阻止接收器和被杀死的候选者之前,系统允许超时10秒。)
解决方案
您使用goAsync()。
或者在任务完成后使用IntentService作为后台任务和sendBroadcast。