2

私の Android アプリには、毎日同期する必要があるデータがありますが、ユーザーがアプリ内にいるときは 1 時間ごとに更新する必要もあります。

毎日の更新のアラームから呼び出されるサービスを既に実装しています。時間ごとの同期を行うための戦略の開発に問題があります。毎時アラームを使用して同じインテントを起動することもできますが、アプリはいつでも強制終了される可能性があるため、キャンセルする方法はありません (また、同じインテントを使用するため、キャンセルすると、私のアラームを含むすべてのアラームがキャンセルされます)。毎日の同期なので、おそらく良くありません)。

もう1つのオプションは、アプリ内で設定されたタイマーを使用し、アプリ内でインテントを起動させることです。アプリが強制終了されると、すべてのタイマーがキャンセルされると思いますか? しかし、私のアプリは複数のアクティビティで構成されており、タイマーをすべてのアクティビティで動作させたいのですが、どうすればよいですか? コードを複製したくありません。既に Activity と ListActivity のサブクラスを使用しています。

4

2 に答える 2

2

毎日同期する必要があるデータがありますが、ユーザーがアプリ内にいるときは 1 時間ごとに更新する必要もあります。

解決策は簡単に思えます: 2 番目の要件を削除します。人々は Android フォンを他のもの (電話など) に使用する傾向があるため、何時間も連続して使用されるアプリはほとんどありません。

1 時間ごとのアラームを使用して同じインテントを起動することもできますが、アプリはいつでも強制終了できるため、キャンセルする方法はありません。

FWIW、画面に表示されている間、アプリは強制終了されません。また、画面には表示されませんが、1 時間ごとに更新されるのは望ましくありません。

アプリが強制終了されると、すべてのタイマーがキャンセルされると思いますか?

通常、アプリは「強制終了」されません。アクティビティが で呼び出されたら、後片付けをしてくださいonDestroy()。をデーモン スレッドでセットアップした場合はTimer、そのスレッドを終了する必要があります。

しかし、私のアプリは複数のアクティビティで構成されており、タイマーをすべてのアクティビティで動作させたいのですが、どうすればよいですか?

各アクティビティからサービスにバインドします。アラームによって起動された場合はIntent、通常の更新処理を実行してください。バインド要求が原因で開始された場合は、毎時Timer実行されていることを確認してください。で呼び出された場合(たとえば、すべてのアクティビティのバインドが解除されたonDestroy()後)、.Timer

于 2010-07-02T19:46:34.770 に答える
0

バックグラウンド サービスで Timer を実行できる場合がありますが (アクティビティよりも強制終了されません)、Android がサービスを強制終了しないという保証はまだありません。そして、このようなものを実行すると、バックグラウンドで多くのバッテリーが使用される可能性があります.

onResume で作成されたバックグラウンド スレッドで 1 時間ごとの同期を行うのはどうですか? そして、ユーザーが最後に同期を行った時間を保存し、それが 1 時間以上経過している場合は、同期を行います。ユーザーが決して見ることのないデータを熱心に同期する理由はないと思うからです。

于 2010-07-02T19:46:58.530 に答える