java - 关闭应用程序后不执行定期作业?
问题描述
此周期性作业在退出应用程序后停止执行。如果应用程序仍在运行,则可以正常工作。我UsageStatsManager
每 15 分钟使用一次收集信息。我尝试每 15 分钟发送一次通知,但没有成功。
这是调度程序代码:
public class JobServiceDashboard extends android.app.job.JobService {
private static final String TAG = "JobServiceDashboard";
private static final int NOTIFICATION_ID = 141;
private boolean jobCancelled = false;
private int totalTime = 0;
private int timeLimit;
private NotificationCompat.Builder builder;
.
.
.
@Override
public boolean onStartJob(final JobParameters jobParameters) {
Log.d(TAG, "Job Started");
timeLimit = jobParameters.getExtras().getInt("limit");
Log.d(TAG, "time limit " + timeLimit);
new Thread(new Runnable() {
@Override
public void run() {
totalTime = 0;
if (jobCancelled) {
jobFinished(jobParameters, false);
}
Calendar cal = Calendar.getInstance();
cal.setTime(Calendar.getInstance().getTime());
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
long startTime = cal.getTimeInMillis();
long endTime = System.currentTimeMillis();
UsageStatsManager usageStatsManager = (UsageStatsManager) getSystemService("usagestats");
List<UsageStats> queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, startTime, endTime);
for (UsageStats us : queryUsageStats) {
totalTime += (int) us.getTotalTimeInForeground() / 60000;
}
if (totalTime > timeLimit) {
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(getApplicationContext());
notificationManager.notify(NOTIFICATION_ID, builder.build());
Log.d(TAG, "Notification Sent");
jobCancelled = true;
}
Log.d(TAG, "total time: " + totalTime);
Log.d(TAG, "time limit: " + timeLimit);
}
}).start();
jobFinished(jobParameters, false);
return true;
}
@Override
public boolean onStopJob(JobParameters jobParameters) {
jobCancelled = true;
Log.d(TAG, "Job cancelled");
return false;
}
}
解决方案
推荐阅读
- c# - 一对零或一关系:当 IDENTITY_INSERT 为 OFF 时,无法在表中插入标识列的显式值
- python - Django 的 csrf_exempt 装饰器会删除所有 POST 数据吗?
- python - 从 cookie 中提取值
- angular - 如何将 *ngFor 与 mat-menu 和 mat-menu-item 一起使用?
- python - Python help():用 `*` 跨越参数是什么意思?
- dart - 如何设置 CupertinoSegmentedControl 高度?
- php - .htaccess 重写 url,不适用于表单提交
- python-3.x - 如何在python中找到两个向量之间的顺时针角度?
- c - 灵活数组成员的非静态初始化?
- junit5 - Junit 5:如何为参数化测试提供名称