1

LongPollで動作するサービスがあり、データを受信するとすべて問題ありませんが、データを受信しないと空の結果を受け取ります(長いポーリング最大時間== 25秒)サービスが手動でオフになることがあります(そしてサービスのリストに表示されません)。

では、このサービスを (.. 常に..) 実行し続けるにはどうすればよいでしょうか?

ロングポーリングで機能し、サービスの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

では、このサービスを (.. 常に..) 実行し続けるにはどうすればよいでしょうか?

戦術的には、質問のタイトルの「15 秒」に基づいて、メイン アプリケーション スレッドでこの長いポーリングを行っていると思います。バックグラウンド スレッドで実行する必要があります。

戦略的に、サービスを「常に実行」し続けることはできません。を使用startForeground()して、サービスが自動的に破棄される可能性を減らすことができますが、ユーザーと OS は、理由を問わずいつでもプロセスを (そのサービスと共に) 取り除くことができます。多くのユーザーは、リソースを浪費するために「常に実行中」のサービスを好まないため、そのようなサービスの開発者をタスク キラーや Play ストアでの低評価で攻撃します。

于 2012-06-02T11:09:27.383 に答える