我正在构建一个应用程序,该应用程序将侦听传入的SMS消息,执行一些可能长时间运行的操作,并在满足某些条件时发回答复。
我已经使用BroadcastReceiver
使监听部分正常工作,但是我不确定如何/在何处执行可能长时间运行的操作。 Android Developer Documentation指出
在onReceive()之后,系统可以随时终止进程以执行以下操作: 回收内存,并以此终止生成的线程 在运行过程中。为避免这种情况,您应该致电 goAsync()(如果您需要更多时间来处理广播 后台线程)或使用以下命令从接收方安排JobService JobScheduler,因此系统知道该过程继续 进行积极的工作。
还有:
在接收者的onReceive()方法中调用goAsync()并传递 BroadcastReceiver.PendingResult到后台线程。这保持 从onReceive()返回后广播活动。但是,即使 通过这种方法,系统希望您完成广播 非常快(不到10秒)。它确实允许您将工作移至 另一个线程以避免主线程故障。
此外,{<1}}在API <21上不可用。
那么我如何在API 16-20上实现这一目标?
答案 0 :(得分:1)
只需在您的Service
中启动BroadcastReceiver
即可执行长时间运行的操作并将结果发送回去。您可以使用IntentService
或常规Service
。