0

定期的にタスクを実行するバックグラウンドスレッドを実行するアプリケーションがあります。UIスレッドは、いくつかの異なるアクティビティを移動します。

私が使用したチュートリアルはこのブログにあります。その要点は次のとおりです。

  • Threadを拡張するクラスを作成します

public final class JSONThread extends Thread {

  • このクラスで、MessageQueueにタスクを追加し、可能な場合は実行を促すメソッドを定義します。

public synchronized void enqueueJSON(final JSON.JSON task) {

ただし、メインアクティビティで最初のオブジェクトを作成した後、別のアクティビティに移動すると、スレッドにバインドされたオブジェクトが明らかに失われます。そのオブジェクトのメソッドを呼び出すことができなくなりました(したがって、キューに追加できません)。

これが私の側のアーキテクチャの誤った決定によるものなのか、それとも明白な解決策の監督によるものなのかはわかりません。何か案は?単純なタスク用の5つのスレッドのプールが少し多すぎるように見えるため、この目的でAsyncTaskを回避しようとしていることに注意してください。

4

2 に答える 2

2

Threadオブジェクトは、Activityよりも有効期間が長い他のオブジェクトのメンバーとして保存する必要があります。

あなたのための2つのアイデア:

a)アプリケーション(http://developer.android.com/reference/android/app/Application.html)のメンバーである可能性があります

サービスを実行していない場合は、これに問題が発生する可能性があります。アプリケーションが強制終了されないという保証はありません(たとえば、アクティビティの上にシステムダイアログがポップアップ表示される場合など)

b)サービスのメンバーである可能性があります(http://developer.android.com/reference/android/app/Service.html)

于 2013-01-17T16:40:52.413 に答える
1

スレッドではなく、サービスを使用する必要があります。サービスは、それにバインドされたアクティビティがある限りバックグラウンドに残り、アクティビティが終了してもリセットされません。

于 2013-01-17T16:40:39.843 に答える