我应该特别使用什么来执行浅背景任务?

时间:2018-07-12 02:24:39

标签: android android-studio android-settings

我正在制作一个应用程序,该应用程序将由系统广播触发,并需要用户输入时间,之后该应用程序应仅运行一个计时器并在计时器结束后执行任务。我的问题如下:

  1. 我是否需要为此使用后台任务,或者是否需要后台任务,因为即使在应用程序抽屉中关闭了应用程序,我也需要运行计时器。
  2. 如果我确实需要使用后台任务,应该使用AsyncTask,Service还是JobScheduler?

我了解到BroadcastReceiver将收听任何系统广播,并且由于我已经在清单中注册,因此该应用程序将在任何此类系统广播上启动。但是,由于系统更改而启动应用程序后,我需要它弹出一个对话框,该对话框以时间(HH:MM:SS)的形式进行输入,此后计时器开始运行时间,计时器停止计时,便完成了另一项任务。

我也不希望该任务是一次性的,这意味着我希望每次系统收到系统更改广播时都完成该任务。

1 个答案:

答案 0 :(得分:1)

对于您想做的事情,基本上需要三件事。

  1. 一个BroadcastReceiver,用于接收系统广播。此组件至关重要。另外,您不必担心这是一件一件事情。已注册的BroadcastReceiver将继续运行其onReceive()方法,直到您或系统取消注册BroadcastReceiver为止,或者您有意放入代码以阻止其激活。

  2. 显示对话框的活动。从技术上讲,BroadcastReceiver也可以显示一个对话框,但是BroadcastReceivers是用于完成简短任务的,因此这不是一个好地方。显示DialogFragment的Activity是更好的选择,因为与Service相比,Activity实际上是用来显示UI的组件。

  3. 用于倒计时的AlarmManager。与其自己创建服务来处理计时器,不如使用带有正确时间的AlarmManager来帮助您响应经过的时间量。您还可以将JobScheduler用作AlarmManager的替代方法,因为两者均用于稍后执行代码。选择哪一个取决于您以后要执行的任务。就个人而言,您还应该考虑使用新的WorkManager,我认为这是更好的选择。根据您需要执行的操作,它将在内部使用JobScheduler或AlarmManager,这将帮助您摆脱决定过程。