Android 7.0(Nougat)打盹模式停止Web服务

时间:2016-09-29 16:32:08

标签: android android-wifi android-doze

我有一个带有WiFi锁的Android前台服务,它充当另一个本地设备的Web服务。在打盹模式之前,获取WiFi锁并根据需要提供服务非常有效。

即使为我的应用关闭了电池优化功能,当屏幕关闭几分钟后,手机仍在查杀应用程序。

如何正确警告Android客户明确要求的服务是否在前台执行,并且他们此时不希望他们的手机进入睡眠状态?

编辑:此问题仍存在于Android 8.0(奥利奥)

2 个答案:

答案 0 :(得分:2)

你可以这样做:就像你打电话给你的服务一样,你可以添加一个代码来保持屏幕清醒。这样可以避免手机自动锁定。以下是文档中的示例代码段。

    public class MainActivity extends Activity {
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //keep screen awake
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
      }

这种方法的优点在于,与唤醒锁不同,它不需要特殊权限,平台可以正确管理用户在应用程序之间移动,而无需您的应用程序担心释放未使用的资源。 此外,您可以按照此SO answer

中所述的有效方式使用警报管理器

答案 1 :(得分:0)

尝试使用前台服务 - https://developer.android.com/guide/components/services.html#Foreground

  

前台服务是用户主动了解的服务   并且当内存不足时,它不是系统杀死的候选者。一个   前台服务必须提供状态栏的通知,   它位于正在进行的标题下。这意味着   除非服务被停止,否则通知不能被驳回   或从前台删除。

你也可以尝试FULL_WAKE_LOCK或SCREEN_DIM_WAKE_LOCK,看看是否会阻止你的设备进入打盹模式.refer - https://developer.android.com/reference/android/os/PowerManager.html#FULL_WAKE_LOCK