标签: android-workmanager

WorkManager beginUniqueWork无法按预期工作

目前,我正在使用WorkManager 1.0.0-alpha02.

def work_version = "1.0.0-alpha02"
implementation "android.arch.work:work-runtime:$work_version" // use -ktx for Kotlin
// optional - Firebase JobDispatcher support
implementation "android.arch.work:work-firebase:$work_version"
Run Code Online (Sandbox Code Playgroud)

当应用程序退出时,使用以下代码执行后台工作程序没有问题.

使用enqueue,按预期工作

OneTimeWorkRequest oneTimeWorkRequest =
        new OneTimeWorkRequest.Builder(SyncWorker.class)
                .addTag(SyncWorker.TAG)
                .build();

WorkManager workManager = WorkManager.getInstance();

workManager.enqueue(oneTimeWorkRequest);
Run Code Online (Sandbox Code Playgroud)

因为,我想避免SyncWorker同时运行多个.我试着用

使用beginUniqueWork,不起作用

OneTimeWorkRequest oneTimeWorkRequest =
        new OneTimeWorkRequest.Builder(SyncWorker.class)
                .addTag(SyncWorker.TAG)
                .build();

WorkManager workManager = WorkManager.getInstance();

workManager.beginUniqueWork(
        SyncWorker.TAG,
        ExistingWorkPolicy.REPLACE,
        oneTimeWorkRequest
);
Run Code Online (Sandbox Code Playgroud)

SyncWorker 根本没有运行.

我可以知道我错过了哪一步吗?谢谢.

android android-workmanager

6
推荐指数
2
解决办法
3534
查看次数

避免从WorkManager复制PeriodicWorkRequest

在应用程序启动时,我想启动将永久工作的服务,但是当用户再次打开应用程序时,它会重复.

PeriodicWorkRequest.Builder sendDataBuilder = new PeriodicWorkRequest.Builder(SendConnectionMetricsWorker.class, Constants.REPEAT_TIME_INTERVAL_IN_HOURS, Constants.REPEAT_TIME_INTERVAL_UNITS)
                .setConstraints(new Constraints.Builder()
                        .setRequiredNetworkType(NetworkType.CONNECTED)
                        .build());
        PeriodicWorkRequest periodicWorkRequest = sendDataBuilder
                .build();
        WorkManager.getInstance().enqueue(periodicWorkRequest);
Run Code Online (Sandbox Code Playgroud)

android android-workmanager

6
推荐指数
1
解决办法
2884
查看次数

在android oreo中重启设备后,PeriodicWorkRequest无法正常工作

我要求根据以下逻辑将app通知推送给用户.

  • 每24小时后会显示A类通知.
  • 每7天后会显示B类通知.
  • 每15天后会显示C类通知.

我使用了PeriodicWorkRequest如下工作管理器,它工作正常,直到设备重启.设备重启后,我的工作没有触发.

build.gradle ---

implementation 'android.arch.work:work-runtime:1.0.0-alpha04'
Run Code Online (Sandbox Code Playgroud)

Java代码

PeriodicWorkRequest showNotification =
                new PeriodicWorkRequest.Builder(ShowNotificationWorkManager.class, interval,
                        TimeUnit.HOURS)
                        .addTag(notificationType)
                        .setInputData(myData)
                        .build();

getWorkManger().enqueue(showNotification);
Run Code Online (Sandbox Code Playgroud)

android android-workmanager

6
推荐指数
2
解决办法
905
查看次数

WorkManager - 永久删除定期工作人员

我使用以下代码进行了更新,每三个小时添加一个新的定期工作人员。

fun runCouponValidatorWorker() {
    val constraints = Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build()
    val worker = PeriodicWorkRequestBuilder<CouponValidatorWorker>(3, TimeUnit.HOURS).setConstraints(constraints).build()
    WorkManager.getInstance()?.enqueueUniquePeriodicWork("couponValidatorWorker", ExistingPeriodicWorkPolicy.REPLACE, worker)
}
Run Code Online (Sandbox Code Playgroud)

我想发布一个更新,它将“杀死”这个工作人员和这个工作人员的每个预定实例。

什么是最好的方法呢?

android android-workmanager

6
推荐指数
1
解决办法
5156
查看次数

如何在 MIN_PERIODIC_INTERVAL_MILLIS 之前测试 PeriodicWorkRequest?

为了测试重复性工作,我需要等待整整15分钟(参考)来测试重复性,这确实效率不高。有没有更好更快的方法让开发人员更快地进行测试?

android android-workmanager

6
推荐指数
1
解决办法
886
查看次数

如何解决工作经理的多实例问题?

我有一个工人要做定期任务。并且在创建活动中调用此工作者。每次活动打开时都会创建一个新实例,并在同一时间多次执行相同的任务。我这样称呼任务

task = new PeriodicWorkRequest.Builder(BackgroundTask.class, 1000000, TimeUnit.MILLISECONDS).build();
WorkManager.getInstance().enqueue(task);
Run Code Online (Sandbox Code Playgroud)

如何避免创建多个实例?如果没有工作人员在运行,我需要在创建活动时调用实例。

android android-service android-studio-3.0 android-workmanager

6
推荐指数
2
解决办法
2919
查看次数

WorkManager的PeriodicWorkRequest正在执行一次而不是重复

我正在尝试使用WorkManager但是我似乎遇到了一个问题,其中PeriodicSync仅在启动时重复一次,就是这样.

我看过这篇文章是WorkManager的PeriodicWorkRequest真的为任何人重复吗?但那里没有答案.我也使用最新的alpha版本10.

如果有人可以提供帮助,我们将不胜感激.我仍然是Android的新手,但需要让它为一个项目工作.我甚至没有尝试将它与我想要的代码一起使用,而只是试图让它正确运行.

我将它设置为每10秒运行一次,我也尝试了10,000毫秒,但都没有工作,10秒后没有任何反应.

日志消息"同步"仅在创建时出现一次,就是这样.

我的另一个问题是,每次我启动我的应用程序时,似乎工作人员的数量增加,好像他们被添加在彼此之上,我不知道这是否相关.这里找到了我的其他问题的答案,但我仍然需要帮助解决我的主要问题.

这是我的代码:

工人阶级

public class MyWorker2 extends Worker {

    private static final String TAG = "BOOGABOOGA";

    public MyWorker2(
            @NonNull Context context,
            @NonNull WorkerParameters params) {
        super(context, params);
    }

    @Override
    public Worker.Result doWork() {

        // Do the work here--in this case, compress the stored images.
        // In this example no parameters are passed; the task is
        // assumed to be "compress the whole library."
        Log.i(TAG, "Sync");

        // Indicate success or failure …
Run Code Online (Sandbox Code Playgroud)

android android-workmanager

6
推荐指数
1
解决办法
1909
查看次数

如何实现PeriodicWorkRequest链?

我研究了Android WorkManager,并且遇到了一个问题。

我有2个作品,第一个作品从服务器和第二个预加载资源中获取一些数据(取决于第一作品的结果)。我每小时需要做一次这种链条。

我需要类似的东西:

workManager.beginWith(work1).then(work2)
Run Code Online (Sandbox Code Playgroud)

但是在WorkManger API中,我发现仅针对OneTimeWorkRequest的链。

android android-jetpack android-workmanager

6
推荐指数
1
解决办法
275
查看次数

当应用程序关闭时,带有广播接收器的工作管理器不起作用

我只想保持蓝牙开启,为此我监听蓝牙状态,如果它被关闭,广播接收器可以启用它。我也希望它在应用程序关闭时运行。因此,即使在应用程序关闭后(当它不工作时),我也试图运行蓝牙广播接收r。为此,我了解到我需要使用工作管理器来支持所有设备。我试图结合 Broadcast Receiver 和 Work Manager。但是当应用程序关闭时我无法让它运行。

这是我的MainActivity.java在这里,我将工作请求排入队列。

package com.example.workmanagersample;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import androidx.work.OneTimeWorkRequest;
import androidx.work.WorkManager;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(MyWorker.class).build();
        WorkManager.getInstance().enqueue(workRequest);

    }
}
Run Code Online (Sandbox Code Playgroud)

下面的类是我的MyWorker.java 在这里我注册了接收器。

package com.example.workmanagersample;

import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.bluetooth.BluetoothAdapter;
import android.content.Context;
import android.content.IntentFilter;
import android.support.annotation.NonNull;
import android.support.v4.app.NotificationCompat;
import androidx.work.Worker;
import androidx.work.WorkerParameters;


public class MyWorker extends Worker {
    private …
Run Code Online (Sandbox Code Playgroud)

android background-service broadcastreceiver android-bluetooth android-workmanager

6
推荐指数
1
解决办法
4225
查看次数

测试 WorkManager 时无法解析 com.google.guava:listenablefuture:{strictly 1.0}

我有一个应用程序,它使用 WorkManager 执行一些计划任务,我正在一堆不同框架的帮助下对其进行测试。我正在使用 robolectric 和 androidx.work:work-testing 这似乎与这个问题有关。

我能够成功运行单元测试,但是当我尝试运行检测测试时,Calculate task graph失败了

Could not determine the dependencies of task ':myModule:mergeDebugAndroidTestResources'.
> Could not resolve all task dependencies for configuration ':myModule:debugAndroidTestRuntimeClasspath'.
   > Could not resolve com.google.guava:listenablefuture:{strictly 1.0}.
     Required by:
         project :myModule
      > Cannot find a version of 'com.google.guava:listenablefuture' that satisfies the version constraints: 
           Dependency path 'MyApp:myModule:unspecified' --> 'androidx.work:work-testing:2.0.1' --> 'androidx.work:work-runtime:2.0.1' --> 'com.google.guava:listenablefuture:1.0'
           Constraint path 'MyApp:myModule:unspecified' --> 'com.google.guava:listenablefuture:{strictly 1.0}' because of the following reason: debugRuntimeClasspath uses version 1.0
           Dependency path 'MyApp:myModule:unspecified' --> …
Run Code Online (Sandbox Code Playgroud)

android robolectric android-guava android-workmanager

6
推荐指数
1
解决办法
2458
查看次数