首页 > 解决方案 > 关闭应用程序后不执行定期作业?

问题描述

此周期性作业在退出应用程序后停止执行。如果应用程序仍在运行,则可以正常工作。我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;
    }

}

标签: javaandroid

解决方案


推荐阅读