问题描述
注意:我已经签出了多个类似的帖子,并尝试了所有可能的一般解决方案,而且大多数受尊敬的帖子都将近一年或更早。现在,我要提出的问题是观察和努力。
期望:首先,我希望创建一个定期服务/工作,即使应用程序最近被关闭或终止/清除也应该正在运行。这样做的目的是间隔--->访存任何数据库并触发向用户的通知。
这是我当前的代码:
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 (将#修改为@)