我在Android上有一个下载器应用程序。
它在下载过程中显示了通知(过程中,不可解除)而且它也抓住了wakelock。我什至要求用户禁用我的应用程序。
但是,各种供应商的节省电池功能似乎忽略了它并随机杀死它。
是否有一种方法可以标记我的应用程序"忙",因此,它在不杀害列表中具有更高的优先级?
请注意,我没有在应用中使用服务。定期活动会产生线程,并从那里处理下载。
请注意,我不在应用中使用服务
那将是您问题的狮子。
常规活动产生线程并从那里处理下载。
这意味着当您不在前景时,Android不知道您正在执行用户会重视的任何事情。Android将愉快地终止您的流程以释放其他流程的系统RAM。
使用服务,也许是IntentService
(因为它已经为您提供了一个背景线程,并且一旦您的工作完成,它就会自动关闭)。将您的Notification
转换为服务上的startForeground()
。
如果您将Wakelock持续很长时间,那么最好让用户知道它,请使用Consonsware指出的前景服务。
但是,如果您的用例不保证任何前景行为,那么我建议您使用框架乔布斯(framework)的工作,与Doze和App Standby一起玩得很好。对于早于API 21,您可以使用JobDisPatcher API。
您可以在此处阅读更多详细信息。