1

15 秒ごとにサーバーからプルする必要があるプル ベースのアプリがあります。そのために、通常の AsyncTask を使用しました。コードは基本的に次のようになります。

protected Void doInBackground(Context... arg0) {
   while (true && this.pull_on ) {
     pull_data();
     TimeUnit.SECONDS.sleep(15)
};

今、私はアプリが突然停止するという大きな問題を抱えています。No exeptions、AsyncTask のステータスは「実行中」であり、「pull_on」変数は「true」に設定されていますが、プルを停止するだけです。

私はこれができnot reproduceます、それは時々起こります、私は長い間完璧に働くことができます、そしてそれはただ止まります.

これがどのように起こるか誰にも分かりますか?

これをタイマーでリファクタリングして実装する必要がありますか?

また、サービスを使用すると、私が知っていることよりもどのようなメリットがありますか? バッテリー電力は問題ではありません。

ご協力いただきありがとうございます。

PS AsyncTask からアクティビティを開始することもあります。この 'ApplicationManager.getCurrentActivity().startActivity( myIntent )' のようですが、問題になることはありません。

PPS

タイマーの縫い目は、使用したいものに制限されています.15秒ごとに何かをしたいのですが、特別な場合には、pingを停止してから再開したい. そのシームのハッキングの量は、AsyncTask で行うよりも多くの作業になります。

4

1 に答える 1

1

それはひどい設計です。バックグラウンドで 15 秒ごとに無限ループを発生させたくありません。主な問題の 1 つとして、アプリがバックグラウンドにプッシュされると、バッテリーが消耗します。

それを行う適切な方法の 1 つは、アラームを設定してそれに反応することです。タイマーも悪いオプションではありません。

これをサービスに移行することを検討することをお勧めします。

Service は、バックグラウンドで実行時間の長い操作を実行できるアプリケーション コンポーネントであり、ユーザー インターフェイスを提供しません。

長時間実行される操作について説明していますが、繰り返し実行される操作もサービスに移行するのが理にかなっています。

サービスに関する公式ドキュメントはこちら: http://developer.android.com/guide/components/services.html

于 2012-12-18T15:31:02.737 に答える