我的BoradcastReceiver的onReceive方法中有一个异步方法。
具体来说,我正在使用ParseSDK中的pinInBackground
进行ParseObject
我的异步方法中的回调永远不会被调用,这让我相信BroadcastReceiver不再在onReceive方法中执行任何事情了
有没有办法手动终止onReceive方法或覆盖它死的方式?或者,我可以使用接收器来启动服务,我可以控制,但任何其他洞察力赞赏
答案 0 :(得分:0)
我的BoradcastReceiver的onReceive方法中有一个异步方法。
如果这是一个明显注册的接收者,请不要这样做。
我的异步方法中的回调永远不会被调用,这让我相信BroadcastReceiver不再在onReceive方法中执行任何事情了
如果该呼叫是异步的,onReceive()
将返回,BroadcastReceiver
将被丢弃,并且(如果没有其他任何事情发生)您的流程可能会在短时间内终止,释放系统RAM。
有没有办法手动终止onReceive方法或覆盖它死亡的方式?
不是。
或者我可以使用接收器来启动服务,我可以控制
这是正确的解决方案。您需要该服务来告诉Android您正在开展工作,因此Android不会像终止您的流程一样积极。在那里,如果您的Parse工作可以同步完成,请使用IntentService
。如果唯一的Parse选项是异步调用,请使用常规Service
,当您获得Parse结果并且不再需要该服务时,可以在服务上调用stopSelf()
。
如果此解析工作可能需要较长时间(例如,15秒以上),那么您还需要考虑WakeLock
和WifiLock
。
答案 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);