【问题标题】:Android - Make app send heartbeat to serverAndroid - 让应用程序向服务器发送心跳
【发布时间】:2013-08-15 12:23:25
【问题描述】:

我需要实现一个常规的heartbeat

heartbeat 本身就是对我的服务器的简单HTTP-GET 调用。

问题是只要我的应用程序处于打开状态,我就想发送它。当我关闭应用程序时,发送应该停止。

我阅读了一些关于 ServicesAlarmManager 的内容,但是在浏览我的应用活动时如何调用/停止它们?

This also 看起来不错,但仍然是同样的问题:

final Handler handler = new Handler();
Runnable runable = new Runnable() {

@Override
public void run() {
    try{
        //do your code here
        //also call the same runnable 
        handler.postDelayed(this, 1000);
    }
    catch (Exception e) {
        // TODO: handle exception
    }
    finally{
        //also call the same runnable 
        handler.postDelayed(this, 1000);
    }
}
};
handler.postDelayed(runable, 1000); 

有人可以发布一个很好的例子或链接吗?

谢谢!

【问题讨论】:

  • 您可以随时尝试线程...或 AsyncTask... 或服务...
  • 只需使用 TimerTask 每隔一段时间发送一次此命令,然后重写 onStop() 和 onDestroy() 方法并删除您的 TimerTask。
  • 我更新了我的问题,希望能减少糟糕投票的风暴 :)
  • 第二次 HTTP 请求会耗尽电量。重新考虑这个设计。
  • @SevaAlekseyev 感谢您的输入,但它不适用于手机,因此没有电池 :)

标签: java android http android-service


【解决方案1】:

问题是只要我的应用程序处于打开状态,我就想发送它。当我关闭 发送应该停止的应用程序

在 android 中比在 iOS 中要困难一些,但我们可以这样做: 在 Android 中,当应用程序进入后台或被杀死时,您在应用程序级别没有回调。例如,您应该在每个 Activity onStop 方法处处理而不是细化。看一下 Activity 生命周期:

或 onDestroy 方法。笔记: 当一个活动不再可见时,可能是因为您的应用程序已进入后台、关闭或其他活动可见。您必须决定是哪种情况,并在需要时使用您的 HTTP Get/Post 或停止它。

Here 是一个带有异步任务的示例代码,用于通过 HTTP 发送数据。

【讨论】:

    【解决方案2】:

    我使用与您的代码类似的Handler 实现了一个简单的超时。当Activity 调用onPause 触发10 秒延迟超时,当Activity 调用onResume 取消调用removeRunnable(...) 如果超时代码触发你知道用户已经离开你的应用程序(这是10 秒超时的原因,如果有一个新的Activity 时间来启动)。

    您可以在超时代码中添加一些内容来终止心跳。例如取消心跳Runnable

    【讨论】:

      猜你喜欢
      • 2011-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 2018-04-29
      • 1970-01-01
      相关资源
      最近更新 更多