1

ロード時にサーバーからのデータを必要としないアクティビティがあります-UIの単純な初期化のみ

UI にはいくつかのボタンがあります。

ユーザーがそれらのいずれかをクリックすると、アプリはサーバーにリクエストを送信します (残りの呼び出し) リクエストが処理されている間、スピナーが表示されます (約 10 秒間)

今のところ AsyncTask を使用しているため、アプリが縦向きから横向きに変わると、アクティビティが再開され、プロセスが失われます

2番目のオプションはローダーを使用することです-問題は、ボタンタップで開始されることです-アクティビティの開始ではありません

これにより、多くの例外が発生します - LoaderManager が開始されていないアイテムにイベントを送信する場合

解決策はありますか?

いくつかのコメント: - 10 秒は単なる例です - ユーザーを 1 つの方向にロックすることはオプションではありません - サービスは単純な残りの呼び出しには過剰です

4

4 に答える 4

0

この件に関する良い記事は次のとおりです。

http://www.javacodegeeks.com/2013/01/android-loaders-versus-asynctask.html

とにかく、@codeMagic が述べたように、AsyncTaskandroid:configChanges="orientation|screenSize"十分なはずです (構成の変更時にアクティビティが再作成されるのを防ぎます)。

于 2013-08-13T15:21:42.517 に答える
0

まず、次のように宣言することで、向きの変更の問題を解消できます。

android:configChanges="orientation"

またはsavedInstanceState()

しかし、ここでの本当の問題は、ユーザーが 10 秒間スピナーを凝視することです。ほとんどのユーザーは、これに対して十分に忍耐強くありません。あなたのアプリが何をしているのかわからないので、正確な提案をするのは難しいですが、あなたはあなたのネットワークで何かをする必要があると言えますAsyncTaskが、ユーザーは他のことをすることができます

終了中にユーザーが他のことを実行できるようにするAsyncTaskか、そのコードを [Service( http://developer.android.com/guide/components/services.html ) に入れることができます。いずれにせよ、ユーザーが 10 秒間回転する間、画面を凝視させないでください。ユーザーは長い間あなたのユーザーではありません。

于 2013-05-29T01:08:09.860 に答える
0

これに を使用している場合は、代わりにAsyncTaska を使用するか、onRetainNonConfigurationInstance使用するか、構成の変更を通じて を有効にすることができます。ServiceFragment.setRetainInstanceAsyncTask

または、構成の変更を無効にします。過去にそれを使用して、ある程度成功しました。

于 2013-05-29T01:08:52.950 に答える