1

我有一项与 LongPoll 一起使用的服务,当我收到我的数据时一切正常,但是当我没有收到数据时,我收到的是空结果(长轮询最大时间 == 25 秒)我的服务有时会手动关闭(并且我没有在服务列表中看到它)。

那么,如何保持此服务(..always..)运行?

递归函数,它适用于长轮询并首先调用服务onCreate()(结构):

//"u" is "new utils()".
public class myservice extends Service {
  public static boolean started=false;
  @Override
  public void onCreate() {
    super.onCreate();
    Toast.makeText(this, "created qweqwe", Toast.LENGTH_LONG).show();
    longpoll();
    this.started=true;
  }
  @Override
  public void onDestroy() {
    super.onDestroy();
    this.started=false;
  }
  private String url = "http://example.com/lp.php";
  private void longpoll() {
    try {
      String resp = u.getData(url); //max time of working u.getData(lpurl) - 25s.
      if (resp.length()>0) doSmthWithData(resp); //It works fine
    } catch(Exception e) {}
    longpoll();
  }
}
4

1 回答 1

2

那么,如何保持此服务(..always..)运行?

从战术上讲,根据您问题标题中的“15 秒”,我猜您正在主应用程序线程上进行这个长时间的轮询。您需要在后台线程上执行此操作。

从战略上讲,您不能让服务“始终运行”。您可以使用它startForeground()来降低您的服务被自动销毁的几率,但用户和操作系统仍然可以随时出于任何原因摆脱您的进程(连同其服务)。许多用户不喜欢“一直在运行”的服务,因为它们浪费了资源,因此会以任务杀手和 Play 商店的低评分攻击此类服务的开发人员。

于 2012-06-02T11:09:27.383 回答