BroadcastReceiver onReceive方法在线程

时间:2015-06-20 15:00:53

标签: android parse-platform broadcastreceiver

我的BoradcastReceiver的onReceive方法中有一个异步方法。

具体来说,我正在使用ParseSDK中的pinInBackground进行ParseObject

我的异步方法中的回调永远不会被调用,这让我相信BroadcastReceiver不再在onReceive方法中执行任何事情了

有没有办法手动终止onReceive方法或覆盖它死的方式?或者,我可以使用接收器来启动服务,我可以控制,但任何其他洞察力赞赏

2 个答案:

答案 0 :(得分:0)

  

我的BoradcastReceiver的onReceive方法中有一个异步方法。

如果这是一个明显注册的接收者,请不要这样做。

  

我的异步方法中的回调永远不会被调用,这让我相信BroadcastReceiver不再在onReceive方法中执行任何事情了

如果该呼叫是异步的,onReceive()将返回,BroadcastReceiver将被丢弃,并且(如果没有其他任何事情发生)您的流程可能会在短时间内终止,释放系统RAM。

  

有没有办法手动终止onReceive方法或覆盖它死亡的方式?

不是。

  

或者我可以使用接收器来启动服务,我可以控制

这是正确的解决方案。您需要该服务来告诉Android您正在开展工作,因此Android不会像终止您的流程一样积极。在那里,如果您的Parse工作可以同步完成,请使用IntentService。如果唯一的Parse选项是异步调用,请使用常规Service,当您获得Parse结果并且不再需要该服务时,可以在服务上调用stopSelf()

如果此解析工作可能需要较长时间(例如,15秒以上),那么您还需要考虑WakeLockWifiLock

答案 1 :(得分:0)

您可以使用IntentService并使您的BroadcastReceiver成为清醒的,WakefulBroadcastReceiver。然后你可以完成你的工作并释放唤醒锁。

@Override
public void onReceive(Context context, Intent intent) {
    Intent service = new Intent(context, MyIntentService.class);
    // Start the service, keeping the device awake while it is launching.
    startWakefulService(context, service);
}

在您的意向服务中:

// Release the wake lock provided by the BroadcastReceiver.
MyWakefulReceiver.completeWakefulIntent(intent);