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

问题描述 投票:19回答:2

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

即使关闭了我的应用程序的电池优化功能,当屏幕关闭几分钟时,手机仍然会杀死应用程序。

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

编辑:这个问题仍然存在于Android 8.0(奥利奥)

android android-wifi android-doze
2个回答
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中所述的有效方式使用警报管理器:


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

© www.soinside.com 2019 - 2024. All rights reserved.