较低目标SDK

时间:2017-06-11 14:27:27

标签: android

我开始使用Android O在Nexus 5x上测试我的应用 我的targetSdkVersion是22.
在开发者网站中,我读到了Background execution limits
其中:
默认情况下,这些限制仅适用于以O为目标的应用。但是,即使应用未定位O,用户也可以从“设置”屏幕为任何应用启用这些限制。

  1. 这些设置在哪里(强制执行A​​ndroid O限制)?
  2. 在我仍然需要的时候,什么是这些限制的最佳做法 保持较低targetSdkVersion

3 个答案:

答案 0 :(得分:0)

  1. 我也找不到。
  2. 最佳做法是为API 26开发此功能,尽管您没有针对它。因此,将您的服务作为前台服务启动。之后,您的服务应该在onCreate中启动前景通知。
  3. 来自the docs

    新的Context.startForegroundService()方法启动前台服务。即使应用在后台,系统也允许应用调用Context.startForegroundService()。但是,应用必须在创建服务后的五秒钟内调用该服务的startForeground()方法。 (startForeground推送通知)

答案 1 :(得分:0)

我在App info > Battery usage下找到了该设置,但并非所有应用都有此设置。

当此设置为OFF时,我会看到以下日志:

  

W / BroadcastQueue:不允许后台执行:接收Intent {act = android.intent.action。$ ACTION dat = package:$ APP_PACKAGE flg = 0x4000010(有额外内容)}到$ APP_PACKAGE / $ APP_RECEIVER

App Info > Battery usage

[更新于2017年9月27日]

如上所述here

  

但是,开发人员无法使用“设置”应用来应用此限制,除非他们的应用恰好位于电池责任列表中,理想情况下不会发生。

本文提供了通过以下命令测试背景限制的无证方法(可能ignoreallow值)

adb shell appops set your.application.id.here RUN_IN_BACKGROUND ignore 

最佳做法是

  
      
  • 如果您打算坚持使用较低的targetSdkVersion一段时间,并且您确实非常确定您的应用程序不会出现在电池责任列表中,并且您想忽略现在的背景限制,那就是你的决定。

  •   
  • 但是,如果您打算坚持使用较低的targetSdkVersion并且您的应用确实会消耗相当多的电池寿命,那么您应该使用上面引用的adb shell appops命令测试您的应用。如果没有别的,您可以通过“设置”中的“电池”屏幕识别用户在限制后台工作时可能遇到的症状。这样,如果您收到关于这些症状的客户服务电话/电子邮件/文本/ Play商店评论/糖果图,您可以更好地建议用户做什么。

  •   

另见Android Oreo Background Execution Limits

答案 2 :(得分:0)

  1. 应用信息>电池使用情况
  2. 遗憾的是,IMO的最佳做法是针对API 26 ...此默认行为仅适用于旧版应用(位于Play商店但不再更新)。