我在Android上有一个下载程序。
它在下载过程中显示通知(正在进行中,不可忽略),它还会捕获唤醒锁。我甚至要求用户为我的应用禁用Doze。
然而,来自不同供应商的省电功能似乎忽略了它并随机杀死它。
有没有办法将我的应用程序进程标记为“忙”,以便它在不可杀死列表中具有更高的优先级?
请注意,我没有在我的应用中使用服务。常规活动产生一个线程,并从那里处理下载。
请注意,我没有在我的应用中使用服务
那将是你问题的最大份额。
常规活动产生一个线程,并从那里处理下载。
这意味着,当您不在前台时,Android不知道您正在做任何用户会重视的事情。 Android将很乐意终止您的进程,为其他进程释放系统RAM。
使用服务,也许是IntentService
(因为它已经有了一个后台线程,一旦你的工作完成就会自动关闭)。在服务中将Notification
转换为startForeground()
。
如果您长时间保持唤醒锁,那么最好让用户知道它,使用CommonsWare指出的前台服务。
但是,如果您的用例不保证任何前景行为,那么我建议您使用框架JobScheduler,它与打盹和应用程序待机状态也很好。对于早于API 21,您可以使用JobDispatcher API。
你可以阅读更多细节here。