目前,我正在使用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)
当应用程序退出时,使用以下代码执行后台工作程序没有问题.
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同时运行多个.我试着用
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 根本没有运行.
我可以知道我错过了哪一步吗?谢谢.
在应用程序启动时,我想启动将永久工作的服务,但是当用户再次打开应用程序时,它会重复.
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) 我要求根据以下逻辑将app通知推送给用户.
我使用了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) 我使用以下代码进行了更新,每三个小时添加一个新的定期工作人员。
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)
我想发布一个更新,它将“杀死”这个工作人员和这个工作人员的每个预定实例。
什么是最好的方法呢?
为了测试重复性工作,我需要等待整整15分钟(参考)来测试重复性,这确实效率不高。有没有更好更快的方法让开发人员更快地进行测试?
我有一个工人要做定期任务。并且在创建活动中调用此工作者。每次活动打开时都会创建一个新实例,并在同一时间多次执行相同的任务。我这样称呼任务
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
我正在尝试使用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 WorkManager,并且遇到了一个问题。
我有2个作品,第一个作品从服务器和第二个预加载资源中获取一些数据(取决于第一作品的结果)。我每小时需要做一次这种链条。
我需要类似的东西:
workManager.beginWith(work1).then(work2)
Run Code Online (Sandbox Code Playgroud)
但是在WorkManger API中,我发现仅针对OneTimeWorkRequest的链。
我只想保持蓝牙开启,为此我监听蓝牙状态,如果它被关闭,广播接收器可以启用它。我也希望它在应用程序关闭时运行。因此,即使在应用程序关闭后(当它不工作时),我也试图运行蓝牙广播接收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
我有一个应用程序,它使用 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)