2012-03-02 16 views
5

以前は、方向の変更とAsyncTask(および長時間実行されている他のバックグラウンドタスク)はお互いにうまくいっていませんでした。新しく作成されたアクティビティ(オリエンテーションの変更から)でまだ実行中のタスク(またはスレッド)と、アクティビティがアタッチされていない間にタスクが終了した場合の対処方法については、常に問題があります。Android、AsyncTask、長時間実行中のプロセス、および方向の変更

FragmentsとLoaderManagerを使用していても、これはまだ私にとって問題があるようです。

長年に渡って実行されている任意のタスクや姿勢変更を管理するために、最近どのような方法が望ましいですか?新しく作成されたアクティビティーで実行中のタスクを知る。アクティビティが添付されていないときにタスクが情報を配信しようとしないようにする。

ありがとうございました

+2

"プロセス"という意味ではなく、何か他のものを意味する場所で、 "プロセス"という言葉を置き換えて質問を書き直すことをお勧めします。 OSプロセスには、プロセスが情報を提供しない、プロセスがプロセスを作成しないなど、ごくわずかな意味しか持たない非常に明確な定義があります。 – CommonsWare

答えて

4

は、私はちょうどマニフェストに私の活動に

android:configChanges="orientation|keyboardHidden|keyboard" 

を入れて、それを行うこと。 1年後に私は問題がなかった。

+0

自分で設定の変更をどうやって処理するのですか? – synic

+0

私はマニフェストでそれを持つと、アクティビティが再作成されないようになり、すべての問題を解決することがわかりました。私はそれを自分で扱うことに目を向けるつもりでしたが、実際にはそれが不要であることが分かりました。それは、あなたがどのように期待/希望するかに作用します。 – Pyrodante

+0

うわー。私はいつも私が望んでいたよりも複雑に思えたので、私はいつもこれから離れてしまった。あなたが正しい、それは私がそれをしたい方法で動作するようだ。 – synic

-1

これはいつもと同じです:サービスを利用してください。あなたのサービスからのイベントをブロードキャストし、あなたのアクティビティ(または何らかの中間層)にキャッチします。あなたの活動は、その状態に基づいて、それらのイベントで何をすべきかを選択することができます。

これはかなり広い質問です。私のプログラムで

+1

これはサービスが解決しようとしている問題ではないと思います。アプリケーションにタスクがアクティビティのライフサイクルと独立していない場合、サービスはリソースの浪費にすぎないようです。 – synic

0

他の投稿が示唆しているように、あなたはandroid:configChanges = xxxを使用できます。

ただし、必ずしもそうである必要はありません。 Androidは、設定の変更に伴う活動を停止し、新しいものを作成するように設計されています。代替画面レイアウトを提供することで、状況によってはこのメリットが得られます。 これは、例えば、横向きの向きが縦向きのものとは異なる表示を示す複数ペインのアプリでは意味があります。

あなたの質問に戻るには:長時間実行される操作を処理するための優先的な方法については読んでいませんが、自分の経験からこのようなタスクを永続的な状態(onRetainNonConfigurationInstance/onCreateで保存/復元) 、または永続フラグメントを使用します。

アクティビティーで、すでに実行中のタスクが検出された場合は、その進行状況を示すダイアログを再作成する機会が与えられます。

注:オリエンテーションの変更だけでは、あなたの活動を再現させることはできません。言語の変更、ドッキング、その他の可能性に備えて準備してください:)しかし、向きを変えるのが最も一般的です。

+0

永続フラグメントは、アクティビティが添付されていない場合でも結果を提供しようとする可能性があります。 onRetainNonConfigurationInstanceは、アクティブなネットワーク接続を格納できません。ここでの問題は、構成変更の状態を保存することではなく、アクティビティが接続されていないときにデータが配信されないことを確認することです。また、アクティビティがデッドアクティビティに配信されないようにします – synic

関連する問題