Android 精确的作业调度不需要';当应用程序长时间(>;1分钟)在一个加5吨牛轧糖(牛轧糖)上停止时,t工作
我正试图在每天的确切时间显示一次通知。我正在使用Evernote Android作业库进行此操作。时间来自后端API。当应用程序处于前台或后台时,下面的代码工作正常。但当应用程序被长时间(约1分钟)关闭或重新启动后,我并没有收到1+5T(牛轧糖)和Oppo设备(Mashmallow)的通知。此外,有时当我重新启动应用程序时,我会一次收到所有失败的通知。在华硕Zenfone Max(Mashmallow)上一切正常。在华硕的每个场景中都会触发警报(前台、后台、屏幕锁定甚至重启) 下面是一加五的adb日志 //当应用程序被终止且在警报计划时间之前Android 精确的作业调度不需要';当应用程序长时间(>;1分钟)在一个加5吨牛轧糖(牛轧糖)上停止时,t工作,android,alarmmanager,android-jobscheduler,android-job,Android,Alarmmanager,Android Jobscheduler,Android Job,我正试图在每天的确切时间显示一次通知。我正在使用Evernote Android作业库进行此操作。时间来自后端API。当应用程序处于前台或后台时,下面的代码工作正常。但当应用程序被长时间(约1分钟)关闭或重新启动后,我并没有收到1+5T(牛轧糖)和Oppo设备(Mashmallow)的通知。此外,有时当我重新启动应用程序时,我会一次收到所有失败的通知。在华硕Zenfone Max(Mashmallow)上一切正常。在华硕的每个场景中都会触发警报(前台、后台、屏幕锁定甚至重启) 下面是一加五的ad
Shikhars-MacBook-Pro:HOGAndroid_New shikhardeep$ adb shell dumpsys alarm | grep "com.tf.eros.faythTv"
ELAPSED_WAKEUP #0: Alarm{3a8c0ae type 2 when 1118303576 com.tf.eros.faythTv}
tag=*walarm*:com.tf.eros.faythTv/com.evernote.android.job.v14.PlatformAlarmReceiver
operation=PendingIntent{e233e4f: PendingIntentRecord{217c9dc com.tf.eros.faythTv broadcastIntent}}
ELAPSED_WAKEUP #0: Alarm{44439ba type 2 when 1118303589 com.tf.eros.faythTv}
tag=*walarm*:com.tf.eros.faythTv/com.evernote.android.job.v14.PlatformAlarmReceiver
operation=PendingIntent{a7f706b: PendingIntentRecord{a45a7c8 com.tf.eros.faythTv broadcastIntent}}
u0a355:com.tf.eros.faythTv +1s718ms running, 4 wakeups:
*walarm*:com.tf.eros.faythTv/com.evernote.android.job.v14.PlatformAlarmReceiver
//当应用程序被终止并且刚好在警报计划时间之后
Shikhars-MacBook-Pro:HOGAndroid_New shikhardeep$ adb shell dumpsys alarm | grep "com.tf.eros.faythTv"
u0a355:com.tf.eros.faythTv +1s722ms running, 6 wakeups:
*walarm*:com.tf.eros.faythTv/com.evernote.android.job.v14.PlatformAlarmReceiver
代码
你有什么解决办法吗?我也面临同样的问题。不。试着使用WorkManager。它是Android的一部分。这个问题主要发生在中国手机上,如One Plus、Oppo、Vivocan。我们将workmanager安排为特定的日期和时间,就像alarm manager?一样?。根据此链接,AlarmManager是最佳选择,但其他答案也提到WorkManager我尝试使用WorkManager,但在One Plus 6T中,当应用程序被终止时,它不起作用。(背景中)。你能帮我吗?
public class ShowHoroscopeNotificationJob extends Job {
public static final String TAG = "HOROSCOPE_NOTIFICATION";
public ShowHoroscopeNotificationJob() {
super();
}
@Override
protected void onReschedule(int newJobId) {
super.onReschedule(newJobId);
}
@NonNull
@Override
protected Result onRunJob(@NonNull Params params) {
try {
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(getContext(), "HOG_NOTIFICATION")
.setSmallIcon(R.drawable.notification_icon)
.setLargeIcon(BitmapFactory.decodeResource(getContext().getResources(), R.mipmap.ic_launcher))
.setColor(ContextCompat.getColor(getContext(), R.color.colorPrimary))
.setContentTitle("Horoscope Reminder")
.setContentText("Check out Daily Horoscope !!!")
.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
.setAutoCancel(true);
NotificationManager notificationManager = (NotificationManager) getContext().getSystemService(Context.NOTIFICATION_SERVICE);
if (notificationManager != null) {
notificationManager.notify(new Random().nextInt(40) + 1, mBuilder.build());
schedule(getExactTime(ZPreferences.getHoroscopeReminderTime(getContext()))); //again calling schedule() as setExact() can't be periodic
return Result.SUCCESS;
}
} catch (Exception e) {
e.printStackTrace();
return Result.RESCHEDULE;
}
}
public static void schedule(long exactInMs) {
if (exactInMs != 0L) {
new JobRequest.Builder(ShowHoroscopeNotificationJob.TAG)
.setExact(exactInMs)
.build()
.schedule();
}
}