在Android编程中如何在后台运行操作,以提高应用程序的性能,并尽量减少对电池消耗。
在许多情况下,应用程序需要在用户不与之交互时执行某些操作。例如,一个相册应用程序可能需要通过压缩其照片来优化其存
储;应用程序不希望在用户与它交互时这样做,因为这可能会降低其性能。然而,如果一个应用程序在前台不运行时工作,那么它可
能会干扰其他应用程序的性能。因此,应用程序选择正确的方式来完成后台工作是很重
要的。Android平台提供了很多应用程序在后台运行的方法:
Scheduled Jobs
Scheduled Jobs 通常是你最好的选择。当你想运行某个操作时,你可以定义一个job,在你指定的环境下运行。例如,如果你想更新你的应用程序的缓存数据,你可以指定这个操作在设备连接到电源时或者在非网络连接情况下运行,这样可以节省用户电量或者用户的网络流量,系统会在合适的时间启动这些操作,即使你的应用程序当前没有运行。系统还能智能地批量完成操作;例如,当系统空闲时,它会做更多的工作。
Services
在某些情况下,service是一个不错的选择。例如,如果您有一个音乐应用程序,您需要定义一个服务来处理音频回放。在这样的情况下,你可以使用一个前台服务。前台服务做的工作是用户所注意的,他们必须显示一个状态栏图标。
应用程序也可以使用让用户不注意的后台服务。然而,如果用户正在处理另一个应用程序,这会损害系统性能。出于这个原因
Android系统限制应用程序API级别26或更高的应用程序使用后台服务,除非应用程序本身在前台。
当用户完成相应的操作并将程序挂起后,应用程序的后台服务只能维持一个简短的时间。也就是说,在程序挂起时,或者程序导航离开时,你要完成你的操作,否则操作就不执行了。在大多数情况下,如果您希望应用程序在用户不交互的情况下做一些事情,那么您最好使用
Scheduled Jobs。
Broadcasts
应用程序可以注册接收系统广播,并在接收到这些广播时执行操作。然而,有一个危险,如果几个应用程序都试图响应相同的广播,系统性能可能受到损害。由于这个原因,系统限制了针对API级别26或更高的应用程序的注册,以接收其清单中最一般的(隐式)广播,因为以这种方式注册会导致应用程序在广播发送时启动。同样,在这种情况下,最好的选择是使用
Scheduled Jobs。应用程序仍然可以使用它们的显式来注册显式广播,因为它们直接针对应用程序。应用程序也可以登记为隐式广播在运行时调用registerreceiver(),既然这样,他们只会在程序已经运行时
接收广播或者广播发送。