java - 实现定期操作的正确方法

标签 java android service scheduled-tasks task

我需要每 10 秒从 Android 中的服务器发送和获取一些内容。在这里,在 StackOverflow 和文档中,我确实找到了数十种实现它的方法(我尝试过的所有方法都可以完成工作),但似乎到处都有人说这种方式有问题。

我尝试使用循环AsyncTask,直到它被取消(即直到 Activity 被终止),我发现这不是一个好的解决方案。在此之前,我尝试使用常规Threads,然后我发现它会消耗大量电池。

现在我已经使用 Runnable 和 ScheduledExecutorService 的 scheduleAtFixedRate 函数完成了此操作,类似于此处建议的代码: How to run an async task for every x mins in android? 。不用说,它确实有效。但是,如果我的 Activity 在后台(例如用户正在接听来电),它会起作用吗?

最后,我不知道在 Android 手机上最正确的做法是什么。

提前交易。

最佳答案

使用Handler它有各种方法,例如postDelayed(Runnable r, long delayMillis),postAtTime(Runnable r, Object token, long uptimeMillis)等。

Handler mHandler =  new Handler() {
    public void handleMessage(Message msg) {

      //Start runnable here.
    }
   };

mHandler.sendMessageDelayed(msg, delayMillis)

关于java - 实现定期操作的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12159012/

相关文章:

drupal - 服务 - Rest 服务器设置

java - org.hibernate.exception.ConstraintViolationException : Column 'pacientId' cannot be null

Java 网络应用程序作为服务运行失去网络连接

java - 除了给出 transient 关键字之外,我们可以拒绝 java 对象的序列化吗

java - Android studio 更新后出现以下错误,任何人都可以帮我解决2

android - 解析 GCM 推送通知不适用于 Android 6.0 Marshmallow Developer Preview 3

android - 如何在 corona sdk 中创建和保存设置?

android - 使用 Alarmmanager 在特定时间启动服务

java - 为什么 HttpURLConnection 不发送 HTTP 请求

java - Spark,序列文件时出现NegativeArraySizeException