在API <21上收到SMS时执行长时间运行的操作

时间:2018-09-19 13:34:25

标签: android broadcastreceiver broadcast android-broadcast android-broadcastreceiver

我正在构建一个应用程序,该应用程序将侦听传入的SMS消息,执行一些可能长时间运行的操作,并在满足某些条件时发回答复。

我已经使用BroadcastReceiver使监听部分正常工作,但是我不确定如何/在何处执行可能长时间运行的操作。 Android Developer Documentation指出

  

在onReceive()之后,系统可以随时终止进程以执行以下操作:   回收内存,并以此终止生成的线程   在运行过程中。为避免这种情况,您应该致电   goAsync()(如果您需要更多时间来处理广播   后台线程)或使用以下命令从接收方安排JobService   JobScheduler,因此系统知道该过程继续   进行积极的工作。

还有:

  

在接收者的onReceive()方法中调用goAsync()并传递   BroadcastReceiver.PendingResult到后台线程。这保持   从onReceive()返回后广播活动。但是,即使   通过这种方法,系统希望您完成广播   非常快(不到10秒)。它确实允许您将工作移至   另一个线程以避免主线程故障。

此外,{<1}}在API <21上不可用。

那么我如何在API 16-20上实现这一目标?

1 个答案:

答案 0 :(得分:1)

只需在您的Service中启动BroadcastReceiver即可执行长时间运行的操作并将结果发送回去。您可以使用IntentService或常规Service