WorkManager:定期工作无法正常进行

问题描述

注意:我已经签出了多个类似的帖子,并尝试了所有可能的一般解决方案,而且大多数受尊敬的帖子都将近一年或更早。现在,我要提出的问题是观察和努力。

期望:首先,我希望创建一个定期服务/工作,即使应用程序最近被关闭或终止/清除也应该正在运行。这样做的目的是间隔--->访存任何数据库并触发向用户通知

这是我当前的代码

MainActivity-> onCreate->

PeriodicWorkRequest workRequest = new PeriodicWorkRequest.Builder(
            NotificationWorker.class,1,TimeUnit.HOURS)
            .setConstraints(
                    new Constraints.Builder()
                            .setrequiredNetworkType(NetworkType.CONNECTED)
                            .build()
            )
            .build();

 WorkManager.getInstance(this)
            .enqueueUniquePeriodicWork("simplified",ExistingPeriodicWorkPolicy.REPLACE,workRequest);

NotificationWorker类->

public class NotificationWorker extends Worker {
private static final String TAG = "dante:NotifyWorker";
private Context mContext;
public NotificationWorker(@NonNull Context context,@NonNull WorkerParameters workerParams) {
    super(context,workerParams);
    mContext = context;
}

@NonNull
@Override
public Result doWork() {
    Log.d(TAG,"doWork: called");
    notificationmanagerCompat mnotificationmanager = notificationmanagerCompat.from(mContext);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationChannel channel = new NotificationChannel(
                "My app","My app",notificationmanager.IMPORTANCE_DEFAULT);
        channel.setDescription("My description.");
        mnotificationmanager.createNotificationChannel(channel);
    }

    NotificationCompat.Builder mNotificationBuilder = new NotificationCompat.Builder(mContext,"My app");

    mNotificationBuilder.setContentTitle("Work manager")
            .setContentText(String.valueOf(new Date().getTime()))
            .setSmallIcon(R.drawable.ic_app_notification)
            .setPriority(NotificationCompat.PRIORITY_LOW);
    mNotificationBuilder.setProgress(0,true);
    Notification notification = mNotificationBuilder.build();
    mnotificationmanager.notify(121,notification);
    return Result.retry();
}

@Override
public void onStopped() {
    super.onStopped();
    Log.d(TAG,"onStopped: called");
}

观察:

1。据我了解, PeriodicWorkRequest 后台工作,并且在我的情况下每隔1小时执行一次 doWork 。但是我注意到的是,一旦应用程序关闭并从最近清除后,即使在等待了数小时和一天之后,我也再也没有收到过对 doWork 的回调/执行。

2。。3个多小时后再次打开应用程序时,我观察到日志堆栈并发现3-4次 doWork 被记录为“ doWork :称为“ ”,这很令人惊讶,因为我希望这些日志按受尊重的时间间隔打印。

3。在应用关闭并清除了最近的内容后,我的通知也从通知栏删除了,这是我使用 WorkManager 的主要用例,所以我从没料到过

4。为了理解回调,我已覆盖 onStopped 添加登录信息以获取洞察力,但始终没有得到调用

工作量::在经历了类似的早期文章之后,我尝试了以下方法

1。。更改现有的PeriodicWorkPolicy->保留,替换

2。。更改约束并因此等待响应。

3。。创建了自定义提供程序 MyWorkManagerInitializer ,将其作为提供程序放置在AndroidManifest中,然后从 onCreate 执行确切的PeriodicWorkRequest,发现之前的行为完全相同提到。我已经从中等帖子https://medium.com/@programmerr47/custom-work-manager-initialization-efdd2afa6459

进行了测试

4。在使用 MyWorkmangerInitializer 方法时,我没有遇到任何与“ Work Manager is disable *(工作管理器已禁用*)”相关的异常,但在Android 21(Lollipop)版本中却是这样奇怪的原因是它正在其他更高版本上运行,但是在所有工作版本中,我的观察都是相同的。

积极寻找所有观察结果的澄清和解决方案。在此先感谢您的时间:)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...