2011-07-18 9 views
0

私は、AsyncTaskをインスタンス化し、Webサービスを呼び出し、その結果をListViewに取り込むListActivityを持っています。Webサービスコール中の回転方向

AsyncTaskの実行中にデバイスのローテーションをどのように処理すればよいですか?私はそれをキャンセルし、必要なデータを取り除き、ListActivityが再作成されたときに新しいデータを開始する必要がありますか? Androidは何らかの形でこのようなケースをすでに処理していますか?

答えて

0

でドキュメントを参照してください。しかし、私は、あなたがこれをしたときでさえ、何人かのメーカーのデバイスがまだアクティビティを再現していることを発見しました(これまでのHTC携帯電話を見たことがあります)。

適切な解決策は、次のリンクでCommonsWareの答えです:私は前にこれを試してみた

Background task, progress dialog, orientation change - is there any 100% working solution?

0

これは、Asynchtaskではなく、サービスであると思われます。長いクエリを実行していて、方向性に関係なく同じ方法で結果を提供し続ける必要があるためです。

ところで、Asynctaskを殺すのは簡単ではありません。サービスを本当にバックグラウンドで実行できるようにすることをお勧めします。

+0

、それは1つの大きな欠陥を持っています。私は、ListActivityにクエリが完了したことを通知し、ListActivityにデータを渡すためにBroadcastReceiverを使用しました。しかし、BroadcastReceiverはonPause()中に登録解除されています。つまり、ユーザが別のアプリを起動したり、クエリ中にアプリケーションが中断された場合、ListActivityはクエリが終了したことを伝えるメッセージを聞きません。 – Andrew

+0

http://stackoverflow.com/questions/1538796/update-android-listactivity-when-list-data-changesを見てください - あなたはそれを探求したいかもしれません。 – Yossi

+0

@Andrew:あなたは同じ解決策を見つけましたか?私もこの問題に直面しています。解決策を見つけようとしています。 –

0

オリエンテーション変更時にListActivityを再作成する必要がありますか?私はあなたのユーザーがそれを望んでいないと思うだろうが、むしろListViewを実行することになるだろう。

オリエンテーションが変更されるたびにアクティビティを再開せずに、一連のHTTP GETとPOSTを一連のAsyncTasks内で実行するアプリがあります。必要なのは、マニフェストで次のような行だけです。

android:configChanges="orientation" 

コンフィグ変更ハンドラをオーバーライドするのToridの提案は、ほとんどの状況で動作しますhttp://developer.android.com/guide/topics/manifest/activity-element.html

+0

これは頭に浮かんでいませんか?私はオリエンテーション中にAndroidが多くのことを処理していることを読んでいることを覚えているようです。あなたがそれらを上書きすると、あなたは自分自身を問題にまで開放しています。 – Andrew

+0

「この属性を使用するのは避けて、最後の手段としてのみ使用してください。設定変更のために再起動を適切に処理する方法の詳細については、実行時の変更を処理する」を参照してください。しかし実際には、うまく動作し、多くのアプリがそれに頼っていると私は確信しています。また、他の方法では、オリエンテーションの変更に関するウェブリクエストを再開する効果があります。これはユーザーの求めるものではありません。 – Torid

+0

これを実装したところ、エミュレータ上でうまくいっているようです。私はそれをリリースするのが楽しい前に、いくつかの広範なデバイステストを行う必要があります。ありがとうございました。 – Andrew

関連する問題