0

私は、タイマーを使用して時間間隔で場所を取得するサービスを使用する Android アプリに取り組んでいます。しかし、アプリをしばらくバックグラウンドに置いておくと、アプリケーションが終了し、そのonCreate()メソッドが再呼び出しされ、タイマーが停止して、アプリケーションを長時間実行し続ける方法を教えてください。

timer  = new Timer();
timerTask = new TimerTask() {           
    @Override
    public void run() {                 
    }
};
timer.schedule(timerTask, 1000*60*4, 1000*60*4);
4

2 に答える 2

1

より長い期間実行されるサービスは、ユーザーに継続的に価値を提供する場合にのみ、実行 (およびエネルギー消費) 時間の価値があります。ポーリングされた場所で何をするかに応じて、短期間だけ価値を提供する場所ポーラーの場合ではありません. この場合、短いタスク (Taskオブジェクトではなく、一般的な意味でのタスクを意味します) を実行するサービスを実装し、サービスを時々実行するようにスケジュールする必要があります。AlarmManagerと呼ばれる Android のスケジューリング メカニズムを使用して、サービスをスケジュールできます。

ただし、このアプローチには固有の問題があります。システムがバッテリーを節約するスリープ状態にある場合、サービスは適切に実行するためにウェイクロックを取得する必要があり、終了したらシステムが復帰するためにウェイクロックを解放する必要があります。睡眠状態。このウェイク ロックの取得/解放メカニズムの実装は簡単な作業ではありません。

自分で実装するのではなく、Commonsware のLocation Poller実装を使用することをお勧めします。これは十分にテストされており、バックグラウンドで実行するサービスのウェイク ロックの取得/解放の問題を解決します。

自分でポーリングを行う必要がある場合 (たとえば、既に作成されたコードを使用する場合)、サービス用に独自のウェイク ロックの取得/解放メカニズムを作成することを避けるために、 Commonsware のWakefulIntentServiceを使用することをお勧めします。使い方はとても簡単です。

于 2013-06-18T17:42:59.330 に答える