运行 浅色背景任务我应该专门使用什么?
What should I use specifically for running a light background task?
我正在制作一个将由系统广播触发并需要用户输入时间的应用程序,之后该应用程序应该 运行 一个计时器并在计时器结束。我的问题如下:
- 我是否需要为此使用后台任务,或者没有它是否可以实现,因为即使应用程序在应用程序抽屉中关闭,我也需要计时器 运行。
- 如果我确实需要使用后台任务,我应该使用什么,AsyncTask、Service 还是 JobScheduler?
我知道 BroadcastReceiver 会收听任何系统广播,并且由于我已在清单中注册,应用程序将在任何此类系统广播上启动。但是,由于系统更改而启动应用程序后,我需要它弹出一个对话框,该对话框以时间形式输入(HH:MM:SS),然后计时器开始 运行s 在这段时间内,一旦计时器停止,另一项任务就完成了。
我也不希望任务是一次性的,这意味着我希望每次系统收到系统更改广播时都完成它。
想要做的事情,基本上需要三样东西。
用于接收系统广播的BroadcastReceiver。这个组件是必不可少的。此外,您不必担心它是一件事情。已注册的 BroadcastReceiver 将继续使用 运行 它的 onReceive()
方法,直到 BroadcastReceiver 被您或系统取消注册,或者如果您故意放置代码以阻止它激活。
一个 Activity 来显示对话框。从技术上讲,BroadcastReceiver 也可以显示 Dialog,但是 BroadcastReceivers 是为短而快速的任务而设计的,所以它不是一个适合做这个的地方。显示 DialogFragment 的 Activity 是更好的选择,因为与服务相比,Activity 实际上是用于显示 UI 的组件。
一个用于倒计时的AlarmManager。与其自己创建一个服务来处理计时器,不如使用具有准确时间的 AlarmManager 来帮助您响应经过的时间量。您还可以使用 JobScheduler 作为 AlarmManager 的替代方案,因为两者都用于稍后执行代码。您选择哪一个取决于您以后要执行的任务。就个人而言,您还应该考虑新的 WorkManager,我认为这是更好的选择。根据您需要执行的操作,它会在内部使用 JobScheduler 或 AlarmManager,这有助于为您摆脱决策过程。
我正在制作一个将由系统广播触发并需要用户输入时间的应用程序,之后该应用程序应该 运行 一个计时器并在计时器结束。我的问题如下:
- 我是否需要为此使用后台任务,或者没有它是否可以实现,因为即使应用程序在应用程序抽屉中关闭,我也需要计时器 运行。
- 如果我确实需要使用后台任务,我应该使用什么,AsyncTask、Service 还是 JobScheduler?
我知道 BroadcastReceiver 会收听任何系统广播,并且由于我已在清单中注册,应用程序将在任何此类系统广播上启动。但是,由于系统更改而启动应用程序后,我需要它弹出一个对话框,该对话框以时间形式输入(HH:MM:SS),然后计时器开始 运行s 在这段时间内,一旦计时器停止,另一项任务就完成了。
我也不希望任务是一次性的,这意味着我希望每次系统收到系统更改广播时都完成它。
想要做的事情,基本上需要三样东西。
用于接收系统广播的BroadcastReceiver。这个组件是必不可少的。此外,您不必担心它是一件事情。已注册的 BroadcastReceiver 将继续使用 运行 它的
onReceive()
方法,直到 BroadcastReceiver 被您或系统取消注册,或者如果您故意放置代码以阻止它激活。一个 Activity 来显示对话框。从技术上讲,BroadcastReceiver 也可以显示 Dialog,但是 BroadcastReceivers 是为短而快速的任务而设计的,所以它不是一个适合做这个的地方。显示 DialogFragment 的 Activity 是更好的选择,因为与服务相比,Activity 实际上是用于显示 UI 的组件。
一个用于倒计时的AlarmManager。与其自己创建一个服务来处理计时器,不如使用具有准确时间的 AlarmManager 来帮助您响应经过的时间量。您还可以使用 JobScheduler 作为 AlarmManager 的替代方案,因为两者都用于稍后执行代码。您选择哪一个取决于您以后要执行的任务。就个人而言,您还应该考虑新的 WorkManager,我认为这是更好的选择。根据您需要执行的操作,它会在内部使用 JobScheduler 或 AlarmManager,这有助于为您摆脱决策过程。