2011-02-06 4 views
1

現在、Webサーバーからの作成時に読み込まれるリストビューがあります。私はそれが定期的に更新のためのデータベースをポーリングするか、またはPHPスクリプトがそれを更新できるようにしたい。私はそれがポーリングではなくデータベースによって更新されることを好みます。Neverバックグラウンドスレッドを終了しますか?

私がサービスやasyncthreadを実装することができるということは、ポーリングが行われる限り私は知っています。私もtimertaskクラスを見つけました。

AsyncThreadの場合:これを定期的に繰り返すことはできますか?

TimerTaskの場合:これはasyncthreadやサービスより効率が悪いですか?

スレッド内にTimerTaskを作成する必要がありますか?または独自のスレッドを作成しますか?

+0

ウェブサーバーの仕組みを理解していますか?それらはサーバーからクライアントを更新するようには設計されていません。それを行うプロジェクトがありますが、Webサーバーは投票するように設計されています。 – jcolebrand

+0

確かに私は多くのことを理解していますが、これは私が投票しなければならないことを受け入れましたが、これは私が経験したことのない地域なので、確信しています –

+0

サービス内のコードを追加したいのですが、スレッドを呼び出しアクティビティとして追加します。 CommonsWareによって提案されたIntentServiceは、別々のワーカースレッドでタスクを実行します。 –

答えて

1

サーバーをクライアントに、クライアントをサーバーに変えようとすると、間違ったオリフィスで食べようとしているようです。元のデザインの性質と戦っています。

あなたのアプリケーションは、携帯電話ではなく、継続的に使用することはできません。携帯電話のアプリケーションの優先順位は低いです。携帯電話のアプリケーションは、使用できるエネルギーが限られています。携帯電話のアプリケーションも必ずしもインターネットに接続されるとは限りません。

したがって、あなたは自分のスレッドでサービスを使いたいと思うでしょう(必要に応じてAsyncTaskを使うことができます)。あなたのサービスは独自のスレッドを必要とするので、応答待ちのUIスレッドはブロックされません。また、AlarmManagerを使用して、必要に応じてサービスを起動または終了することもできます(サービスが自力で何度も殺されることになります)。

+1

'IntentService'を' AlarmManager'と併用することをお勧めします。そうすれば、サービスは積極的にユーザーに価値を提供していないときにRAMから抜け出すことができます。 – CommonsWare

+0

サービスが殺されると言うと、私はそれを理解しているので、私はそのアラームマネージャに任意の長さを設定する必要がありますか?すなわち、ポーリング率よりも長い何か?また、アンドロイドのdevサイトでは、alarmmanagerは、正確な時間を必要としない通常のタイミング操作のハンドラよりも効率的ではないと述べています。 –

+0

Stephan、私が連続して言うときは、毎ミリ秒を意味するわけではありません。つまり、30秒ごとに何度もポーリングするようなことです。ポーリングの試行が完了するとすぐに次のタイマーが開始されます。 –

関連する問題