相关疑难解决方法(0)

如何检查服务是否在Android上运行?

如何检查后台服务(在Android上)是否正在运行?

我想要一个能够切换服务状态的Android活动 - 它可以让我打开它,如果它打开则关闭.

android android-service

900
推荐指数
17
解决办法
45万
查看次数

Workmanager中的唯一OneTimeWorkRequest

我们正在使用OneTimeWorkRequest在我们的项目中启动后台任务.

  1. 在应用程序启动时,我们正在启动OneTimeWorkRequest(比如req A)
  2. 取决于用户的操作,我们开始相同的工作请求A.

在某些情况下,如果应用程序在工作请求A正在进行时被杀死,Android会在应用程序重新启动时自动重新启动请求A. 我们再次再次启动请求A. 因此,请求A的两个实例并行运行并导致死锁.

为了避免这种情况,我在app start中执行了以下代码来检查worker是否正在运行但是这总是返回false.

public static boolean isMyWorkerRunning(String tag) {
        List<WorkStatus> status = WorkManager.getInstance().getStatusesByTag(tag).getValue();
        return status != null;
    }
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来处理这个?

我检查了beginUniqueWork().如果我只有一个请求,是否更昂贵?

编辑2: 这个问题是关于独特的一次性任务.为了启动唯一的Periodic任务,我们有一个单独的API enqueueUniquePeriodicWork().但是我们没有用于启动独特的一次性工作的API.我很困惑在继续对象之间使用或手动检查和启动方法.

在最近的构建中,他们为这个enqueueUniqueWork()添加了新的api.这是他们在发行说明中提到的确切原因.

添加WorkManager.enqueueUniqueWork()API以将唯一的OneTimeWorkRequests排入队列,而无需创建WorkContinuation. https://developer.android.com/jetpack/docs/release-notes

android android-architecture-components android-jetpack android-workmanager

9
推荐指数
2
解决办法
4397
查看次数