android - 如何安排android服务以固定速率执行

标签 android android-service

我正在开发一个应用程序,它应该每 X 秒从网络下载一个文件以检查是否有任何更改,我使用一个服务来做到这一点,但它的执行不是固定的延迟时间率,这是我的代码对于服务:


@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();
    checkUpdate();
    return START_STICKY;
}

private Void checkUpdate() {
    timer.scheduleAtFixedRate(new TimerTask() {
            public void run() {
                Log.i("Service", String.valueOf(++counter));
                if(Helper.isNetworkAvailable(getBaseContext())) {
                      // download file
                } else {
                        Log.e("ServiceHandler", "Couldn't get any data from the url");
                    }
                }else {
                    Log.e("Connection", "No connection");
                }
            }
        }, 10000, 10000);
    return null;
}

输出不固定,它应该每 10 秒运行一次,同时以随机方式运行服务

最佳答案

如何在 IntentService 中设置一个 AlarmManager?准确得多。

 Intent intent = new Intent(context, YourClass.class);
 PendingIntent pi = PendingIntent.getService(context, 0, intent, 0);
 AlarmManager am = (AlarmManager) c.getSystemService(Context.ALARM_SERVICE);
 am.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), 10*1000, pi);

确保在 YourClass.class(这是一个 IntentService)中,将您的逻辑放在 handleIntent(Intent intent)中,AlarmManager 发送的 PendingIntent 将每 10 秒调用一次。

附言更新 list

希望对你有帮助

关于android - 如何安排android服务以固定速率执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20948755/

相关文章:

android - Activity 和服务之间的偏好

android - 尝试在 Android 上启动服务

android - 应用程序从应用程序托盘中移除后服务的进程被杀死

Android org.webrtc.VideoRenderer.I420Frame 数组到 PreviewCallback.onPreviewFrame byte[]

android - 在新 Material 设计中,是否有像流行的 Android 应用程序那样在工具栏上居中标题的官方 API?

java - 自定义卡片 View 适配器 : notify data set changed not working

android - 无法在 dialogfragment 中的按钮上获取指针

android - 是否可以知道哪个应用程序绑定(bind)到我的服务?

android - 蓝牙关闭时 bluetoothAdapter.getAddress() 返回什么?

安卓工作室 : not rendering shapes. xml