2011-12-20 6 views
1

特定のメソッドdoThis()(CPU集約アクションではなく、WebサーバーへのPOSTのみ)を10分ごとに実行し、そのメソッドが実行を終了すると、ユーザーに通知します(ToastまたはNotificationまたは何か並べ替えの)。しかし、私はユーザーがまだUIと対話していることを期待しているので、UIスレッドをブロックしたくありません。これを行う最も効率的な方法は何ですか? Handler?またはServiceまたは何らかの並べ替え(つまり、IntentService)?設定した間隔でメソッドを実行する最も効率的な方法は?

答えて

3

IMOは、ScheduledThreadPoolExecutorを使用しています。私の答えはhereで、このヘルプを参考にしてください。

+0

"shutdown()"を呼び出した後。同じScheduledThreadPoolExecutorバックアップを開始することを選択した場合、許可されますか?またはインスタンスを作成する必要がありますか? –

+0

ユーザーがアプリケーションを変更した場合、Executorはバックグラウンドで実行されますか? –

+0

@MohitDeshpande、良い質問、shutdown()を呼び出した後、もう一度使いたい場合は、新しいものを初期化する必要があります。それ以外の場合は、新しいタスクをサブミットしようとしたときにRejectedExecutionExceptionを取得します。あなたの2番目の質問については、私はそう思うが100%確実ではない、あなた自身を試してみるのが良い。 – yorkw

-1

タイムドタスクを実行する必要があると述べたので、タイマークラスをお勧めします。あなたがあなたの活動はあなたがバックグラウンドで実行するサービスにそれを置くことができ、他の活動自体に同じのためタイマークラスを使用することができます 実行中にこのアクションを実行する必要がある場合には ...

は、この参照してくださいリンク。 :AsyncTaskについてhttp://developer.android.com/resources/articles/timed-ui-updates.html

+0

私はタイマーの提案に反対しています。私はこれらの人たち、特に例外処理に関しては何の問題もありませんでした。タイマーはちょうどそれらをあなたの天気予報を残すそれらを飲み込むかどうか働いたかどうか。 –

+0

あなたが何を経験したのか、それが完璧に機能している日まで私は残念です。 – Abhinava

0

どのように?

doInBackground方法を使用すると、UIスレッドと相互に作用することなく、特定の間隔でバックグラウンドで特定のメソッドを実行するのに役立ちます。

onPostExecuteあなたは、私がAsyncTask経由でこれを行うToast

0

を使用してユーザーに通知するのに役立ちます。

doInBackground(String... params){ while (running){ doThis(); Thread.sleep(10 * 1000); } }

私は私のアプリは、これらの更新プログラム(GETおよびPOSTを)より頻繁に(すべての5-10秒)を実行し、表示されることを追加したい:doInBackground()方法は、このような何か(単に擬似コード)を探しますユーザーに新しい価値をもたらします。そのため、私はアクティビティを使用します。代わりにサービスからAsyncTaskを起動することができます。私はそのパスダウンされていないが -

あなたが持っている他のオプションは、AlarmManagerを使用することです。

+0

ユーザーがアプリケーションを切り替えるとAsyncTaskがバックグラウンドで実行されますか? –

+0

はい、これが起こらないようにするための措置を講じない限り、それはなります。私の場合は、アクティビティからAsyncTaskを開始します。 'onPause()'では、(カスタムロジックを使って)タスクを「一時停止」します。 'Service'からタスクを開始した場合、そのタスクをバックグラウンドで継続させることができます。 – curioustechizen

関連する問題