当前位置: 首页 > 知识库问答 >
问题:

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

杨利
2023-03-14

我正在开发一个应用程序,该应用程序应该每隔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秒运行一次,同时以随机方式运行服务

共有3个答案

韶镜
2023-03-14

对于重复的工作,android提供了简单的api,称为Timer,请查看它。使用非常简单。

安高翰
2023-03-14

不要使用Timer Class,而是使用AlamrManager类。它还执行您想要的相同重复任务。AlamrManager重量轻,即使您的设备处于睡眠模式,它也可以运行。

另请参阅此链接Android:如何使用AlrmManager重复服务

丁理
2023-03-14

如何在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)中,它将每10秒由AlrmManager发送的PendingIntent调用一次。

附言:更新你的货单

希望它有所帮助

 类似资料:
  • 正如标题所说,我正在尝试使用排定注释的fixedRate参数,以便每秒调用一个函数。下面是我正在使用的代码: 按照我的理解,在打印第一个“结束线程”之前,函数应该打印五次“开始线程”。 问题是函数先打印“开始线程”然后等待5.5秒,打印“结束线程”,然后走“开始线程”,以此类推……看起来调度程序在启动新的执行之前等待前一个执行完成,但fixedRate属性不应该是这种情况。 我仔细阅读了一下,发现

  • 我想修复Android中相机预览的帧率,即20fps或30fps。但是,我们发现帧率不稳定。 在android文档中,据说帧率在getSupport dPreviewFpsRange中定义的最小帧率和最大帧率之间波动。https://developer.android.com/reference/android/hardware/Camera.Parameters.html#getSupporte

  • 问题内容: 我正在学习Android编程的基础知识。 我有一个简单的android测试应用程序,其中将加速度计,磁力计和方向数据记录到一个外部文件中,同时也将其显示出来。我通过调用方法 initLogger* ,单击“ 开始” 按钮(相关传感器的registerListener)来启动日志记录过程。 * 看起来与此类似… 还有一个“停止”按钮,它将停止日志记录过程(最后通过为每个传感器调用unre

  • 这是我需要解决的问题。 创建包含输入表单的基本网页。JavaScript将嵌入到HTML文档中。 输入表格应包括: 用户名字段订单数量输入字段物料价格只读字段–订单总成本“提交按钮”的值设置为5.31只读字段,不使用任何类型的表单按钮元素用户应能够输入其名称和订单数量,然后单击“提交”。单击“提交”时,表单将计算订单总额,包括8.25%的销售税。计算后,订单总额表单字段将更新为总额,包括美元符号和

  • 问题内容: 我想每隔5秒重复调用一次方法,每当我希望停止该方法的重复调用时,我可能会停止或重新启动该方法的重复调用。 这是一些我真正想要实现的示例代码。在这方面请帮助我,我将非常感谢您。 问题答案: 使用以下命令设置重复任务: 如果您想取消任务,只需调用这里就是您的对象 并且您还可以检查答案下方的评论,他们已经提供了有关此内容的简短信息。

  • 问题内容: 问题: 我有一个要求以固定速率调用dao方法(例如每10秒调用一次),然后我需要检查结果是否有效(如果存在),否则请每隔10秒继续调用该方法,直到获得有效结果或已定义超时(例如2分钟)结束了。 方法: 我想将任务和调度程序逻辑分开,并以一种可以被具有相似要求的不同类使用的方式编写任务。 我能想到的一种方法是定义一个新的轮询器任务 用户只需简单地提供task和isValid的实现; 然后