【问题标题】:Running a foreground service in Chinese ROMs在中文 ROM 中运行前台服务
【发布时间】:2018-11-29 10:37:17
【问题描述】:

我创建了一个前台服务来不断扫描我周围的 BLE 设备。出于某种原因,它似乎可以在我的库存 android 设备 Google 像素和三星 S9+ 上完美运行。

但最近我用中文ROM(Oneplus 6T,小米Poco F1)测试了该应用程序,前台服务似乎在几分钟后就被杀死了。我已经使用 workmanager 重新启动服务,但应用程序没有重新启动,我收到了应用程序的错误报告。

同样在android 8.0(小米红米3s prime)以下的中文ROM设备上,简单的服务不起作用,我也需要在那里使用前台服务。有没有办法解决这个问题?

【问题讨论】:

  • 考虑使用唤醒锁
  • 请添加您尝试过的代码。
  • @GeekWithGlasses 已经做到了。
  • @ofer2980 需要为每个ROM定制解决方案。还可以使用 ACTION_BATTERY_SAVER_SETTINGS 意图的对话框打开电池优化。但是它不是故障安全的,因为您需要在每个构建中关闭深度电池优化设置。

标签: android altbeacon foreground-service xiaomi oneplusthree


【解决方案1】:

要求用户将您的应用列入白名单。这是唯一的解决方案。甚至前台服务+唤醒锁也行不通。

上个月有一个讨论:Workmanager reliability for periodic tasks on Chinese roms (Xiaomi, Huawei, and so on). 那里有一些有用的链接,但最终你必须让用户在每个 ROM 的特定电池优化(或其他名称)设置中将你的应用列入白名单。

【讨论】:

  • @DeweyReed 我现在使用的是小米 Poco F1 和一加 6T。在 OnePlus 6T 中,我将我的应用偏好设置为不优化,但它被杀死了。在 Poco F1 上,自动启动已打开,但我仍然面临它被杀死并且必须由 WorkManager 或意图重新启动的问题。你能解释一下吗?
  • @DivyeShah 恐怕我做不到。我不拥有这些手机,白名单程序完全不同。但是在那个链接中,你可以找到这个链接bitbucket.org/copluk/acr/issues/607。有有用的演示图片。
  • @DeweyReed 白名单是指关闭电池优化对吧?
  • @DeweyReed 帮了大忙!谢谢,但中文ROM是一场噩梦。我不知道如何说服用户关闭这些电池优化!
  • @DeweyReed 我刚在我的一加上安装ACR后发现,它没有请求电池优化权限,但它一直在运行,这怎么可能?
【解决方案2】:

一种简单的方法是要求用户在应用启动时打开电池优化设置,将您的应用放入未优化的应用中 使用以下代码打开设置:

    Intent batterySaverIntent=new Intent(Settings.ACTION_BATTERY_SAVER_SETTINGS);
startActivity(batterySaverIntent);

或者你可以试试这个:

  @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        startForegroundService(new Intent(this, ServiceClass.class));
    }

【讨论】:

  • 我试过但它停留了一个小时,现在我正在等待它使用 workmanager 重新启动,有什么见解吗?
猜你喜欢
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 2019-05-14
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多