2

これはよくある質問かもしれませんが、正確なシナリオを見つけることができませんでした。多くの点で開発者の選択にかかっていることは理解していますが、最善の選択をするのに十分な知識はありません。

ユーザーがログインしていることを確認しながら、ロゴを表示するだけの最初のアプリ スプラッシュ スクリーンがあります。ログインの詳細が既に sharedPreference に保存されている場合は、検証のために詳細のオンライン データベースに対してそれらの詳細を確認します。これがすべてチェックされたら、ユーザーをアプリのメイン画面または登録画面に渡します。

したがって、このユーザーの詳細のチェックを行ってから、それらを検証するとき。これを個別に行うか、ハンドラーを使用する必要がありますか? 進行状況の詳細をUIに戻したくないので、AsyncTaskは必要ないと思いますか?

ティア

4

4 に答える 4

1

非同期タスクを使用するのはいつですか?
AsyncTaskは、メモリを大量に消費する/バックグラウンドスレッドへの呼び出しをブロックするのに役立ちますが、UI操作はUIスレッドで続行できます。いずれかの操作でUIスレッドが4〜5秒以上ブロックされると、ANR(Android Not Responding)ダイアログが表示される場合もあります。AsyncTaskは、プロセスの実行後(onPostExecute)および開始前()にUIを更新する場合に便利ですonPreExecute

スレッドのdoInBackground使用AsyncTaskを使用して 行うことはすべて、スレッドを使用して実現することもできます。ただし、UI操作を実行する必要がある場合は、HandlerまたはrunOnUiThreadを使用してタスクを実行する必要があります。スレッドを使用したい場合は、Androidの痛みのないスレッドを参照してください。

また、ブディウスが言ったことは真実です。

あなたの場合、AsyncTaskを使用してsharedPrefでユーザー資格を確認し、ミドルウェアで適切に認証して、最後にonPostExecuteで新しいアクティビティに移動できます。

その間、進行中の認証プロセスを示す進行状況バーをユーザーに表示できます。

于 2013-02-25T16:01:55.937 に答える
1

それに追加します。「ホーム画面」からバックグラウンドでユーザーのログイン(電話に保存されている)を確認する必要があるという非常によく似た状況がありました。IntentService ResultReceiver パターンを使用しました。最初は慣れるのに少し時間がかかりましたが、実装すると管理が非常に簡単になりました。

基本的に、インテント サービスであるアクティビティを開始し、必要なパラメーター (ユーザー名、パスワードなど) を渡します。私の場合、REST を使用してユーザーを検証するのは別のクラスでした。REST クラスが処理を完了すると、ResultReceiver メソッド onReceiveResult が REST アクティビティから UI アクティビティにデータを返します。

于 2013-02-25T16:09:03.100 に答える
1

これはネットワーク アクティビティであるため、おそらく別のスレッドで行う必要があります。IntentService良いオプションです。あなたの主な懸念は、ユーザーが画面を回転させ、アクティビティが破棄されて再作成された場合でも、選択した方法が機能する必要があることだと思います。

でスプラッシュ画面にフラグメントを使用するとsetRetainInstance(true)、構成の変更後にアクティビティに再接続されます。次に、サービスに a Handler(Messengerより正確には a) を渡すか、サービスが動作を終了したときにブロードキャスト インテントを送信するようにします。

于 2013-02-25T15:50:15.050 に答える
1

AsyncTask を使用することをお勧めします。

まず第一に、AsyncTask は完全なスレッド化フレームワーク (バックグラウンドでスレッドとハンドラーを使用する) であるため、シングル スレッド操作をより適切に制御できます。cancel()たとえば、スプラッシュ画面が完了する前にユーザーがアプリケーションを終了することを決定した場合などです。

進行状況の詳細をUIに戻したくないので、AsyncTaskは必要ないと思いますか?

実際、そうです。新しいアクティビティ (Login または AlreadyLoggedIn) を開始する場合でも、UI スレッドから startActivity() を呼び出す必要があります。

于 2013-02-25T15:50:31.077 に答える