【问题标题】:Android - Send data to the server in every 5 minutesAndroid - 每 5 分钟向服务器发送一次数据
【发布时间】:2017-07-09 18:15:30
【问题描述】:

我的 SQLite 数据库表中有一些数据。当我的应用程序启动时,我想每 5 分钟将该数据发送到服务器。

当应用程序关闭时,它应该停止。

  • 对此最好的方法是什么?
  • 我应该使用Service 还是IntentService?
  • 我应该使用AlarmManager、Handler 还是其他任何东西?
  • 我知道我的应用程序速度。我不想让它变慢。什么是有效的方法?

【问题讨论】:

  • 您是否愿意耗尽电池电量以每隔几分钟发送一次数据?
  • 它始终可以访问充电器。所以我认为这不是一个大问题..
  • Service 是一个长时间运行的进程,AlarmManager、TimerTask 或 Handler 将允许您连续运行代码,您是否尝试过制作它们?
  • "当应用程序关闭时" 系统将终止您的应用程序,除非它具有前台活动或前台服务。离开活动与应用程序死亡(进程死亡)不同。

标签: android android-service alarmmanager android-intentservice background-service


【解决方案1】:

如果您仅在应用处于前台时进行传输,则可以使用 Handler 进行。
您在 onResume() 中启动处理程序并在 onPause() 中取消它。 并使用 AsyncTask 或在单独的线程中执行传输。

如果您需要在后台传输,您可以改用服务并使用 AlarmManager 进行调度。
然后从应用的 Activity 启动服务。

我不确定 IntentService 将如何用于此。

【讨论】:

    【解决方案2】:

    由于您只想在应用程序处于前台时运行您的进程,因此 TimerTask 或 Handler 与 Message 或 Runable 结合使用是不错的选择。它不会影响您的应用程序的性能。如果你问这两个中更好的一个,我会说它是 Handler。在此答案中查看详细信息:

    https://stackoverflow.com/a/3975337/4128371

    但如果你想要一个非常好的性能,那么我建议你使用 AlarmManager。否则 Handler 是一个不错的选择。

    【讨论】:

      【解决方案3】:

      警报管理器并不精确,一个 5 分钟的警报时间表可能是当设备处于睡眠状态时,它会以两倍或三倍的时间触发。

      如果您想要准确,设备不必进入睡眠状态。 (我知道这会缩短电池续航时间)

      如果您想阻止设备进入睡眠状态,您需要启动一个带有不可关闭通知的前台服务。那就是服务必须调用 startForeground()

      当设备处于唤醒状态时,Alarmamanager 和 Handler + Runnable 都是准确的……我更喜欢 Handler。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多