0

バックグラウンドで無期限に動作し続けるサービスを実行しようとしています。終了した場合は、自動的に再起動します。しばらくは問題なく動作しますが、30 分または 40 分後に信号の送信が停止しますが、サービスは引き続きリストに表示されます。OnDestroy () に入ることはありません。

Androidが本当に停止するのか、一時停止するだけなのかはわかりません。私は長い間待っていて、二度と生命の兆候を示さないので、一時停止しないと思います. これが私のコードの一部です。理由をテストするには、通知バーに毎分メッセージを表示する無限ループを実行するだけです。

   public int onStartCommand(Intent intent, int flags, int startId) {

      Log.i("Timer", "Service starting" );


      new Thread(new Runnable() { 
            public void run() {
                Runit();
            }
        }).start();

      return START_STICKY;
  }

 private void Runit(){

      Log.i(getClass().getSimpleName(), "Timer started.");
      try {

          while (true){
              Thread.sleep(60000);
              iTimer += 1;                   
              new Thread(new Runnable() { 
                  public void run() {
                      SendNotification("Timer "+String.valueOf(iTimer));
                  }
              }).start();

          }

      } catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
        SendNotification(e1.getMessage());

      }

    SendNotification("Service Stop");

}

startForeground() を使用して別のテストを行ったため、停止するまで 2 日間作業が続きました。しかし、通知バーに表示したくありません。

それが機能しなくなる理由は何ですか?アンドロイドはそれを一時停止または停止しますか?

4

1 に答える 1

0

Android が一部のメモリを解放する必要がある場合、そのメモリを占有しているプロセスを強制終了します。一時停止したプロセスはリソースをロックする可能性があるため、一時停止はあまり意味がありません。

あなたのテストケースは効果的ではありません - モバイルでビジーループを行う正気な人はいません。毎分何かをする必要がある場合は、定期的なアラームを設定して、できるだけ早く仕事をしてください。

于 2012-12-03T19:29:32.773 に答える