アプリに別のスレッドで実行される部品があり、終了時に何らかのオブジェクトにコールバックすることがあります。典型的なパターンは、次のようになります。Androidで非同期コールバックを処理するための良い戦略は何ですか?
1)ビューまたはフラグメントによって一部のモデルが呼び出されます。呼び出しは何かを、いくつかのビューやモデルがスレッドを使用してフラグメント
model.doSomething(context, new Runnable() {
public void run() { /* run on the main thread when model finishes */ }
});
2)またはAsyncTaskに由来して、呼び出し元のスレッドのコールバックを呼び出し - ハンドラ
void doSomething(Context context, Runnable callback) {
Handler handler = new Handler();
// ...
// When finished (this is really done on some separate thread),
handler.post(callback);
}
3)を使用して、コールバックがビューやフラグメントを呼び出していくつかのコントロールロジックを進めるように対話する
コールバックは、ウィンドウに接続されていないビューに触れている可能性があり、アプリケーションが不安定になる可能性があります。
このような状況を処理するには、どのような良い方法がありますか?
ステファンありがとう、私は2011 IOSのアプリを見てみましょう。ビューまたはフラグメントにメッセージを安全にポストバックする方法があるはずなので、サービスは過剰なようです。私はポスト(...)を使って実験してきましたが、ウィンドウが見えない場合の動作と一般的なAndroidパターンの感覚を得ています。 –
これは過度のようですが、このようなコールバックパターンを使用しているときは、通常、長期間実行される非同期タスクを実行しています。呼び出しと完了の間に大きな時間差が存在する可能性があるため、時間がどのように状態に影響するかについて心配する必要があります。これは、アクティビティのライフサイクル内で作業する場合、アクティビティの現在の状態が何であるかを保証するものではないため、より面倒になります。 –