2

我需要实施一个常规的heartbeat.

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

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

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

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

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); 

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

谢谢!

4

2 回答 2

1

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

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

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

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

于 2013-08-15T12:29:39.903 回答
0

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

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

于 2013-08-15T13:21:37.603 回答