2012-02-19 13 views
0

私のアプリケーションに使用しているログイン画面があります。 JSONを呼び出してユーザー名/パスワードが正しいかどうかを確認し、正しい場合はサインインしてメインメニューに進みます。しかし、ログインには約10〜15秒かかりますので、実際にサインインしていることを表示するための非常にシンプルな「Progress Bar」ウィジェットを追加しました(ユーザーが混乱しないように)。ただし、エミュレータでテストしてログインすると、ログイン画面がフリーズしてから10〜15秒後に正常にログインしますが、AVD画面がフリーズしているのでProgress Barは表示されません。私は、JSON呼び出しが行われたときに可視になるように設定する必要があります。私が正常にログインした後にログイン画面に戻ると、進行状況バーが表示され、上手く表示されます。Android用のAVD画面がJSONのログイン時に一時的にフリーズする

これを解決するためのヒントを教えてください。みんなありがとう!

+0

メインスレッドでログインリクエストを実行していますか?はいの場合、AsyncTaskの使用を検討し、これをチェックしてください - > http://developer.android.com/guide/practices/design/responsiveness.html もしそうでなければ、おそらくコードスニペットを使って詳細を教えてください。 – uaraven

答えて

4

長時間の撮影にはAsyncTaskを使用することをおすすめします。また、ユーザの使用に応じて、ProgressBarまたはAlertDialogまたは他の通知者に通知することができます。

低速ネットワーク(2G、3G)と可能なデータレートの制限について、何が遅いのかを考えてください。

あなたのコードは、UIスレッド以外の操作(基本的にはActivityのUIスレッドです)で長時間の操作を処理する必要があります。

AsyncTaskの使用と目的を理解するには、次のリンクを読むことを検討してください。

http://developer.android.com/reference/android/os/AsyncTask.html
http://developer.android.com/resources/articles/painless-threading.html
http://developer.android.com/guide/practices/design/responsiveness.html

+1

トゥーンバディーに感謝します。私は今、これらのものに見返りをつけるつもりです。 – JMarsh

1

あなたはログイン-であればのonCreateメソッドでは、たとえば、このようなものを使用してみてください。

public class YourActivity extends Activity { 
    private static ProgressDialog pd = null; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.your_activity); 
     YourActivity.this.pd = ProgressDialog.show(YourActivity.this, 
         "Logging-in..", "Please wait...", true, false); 
     new DownloadTask().execute(your parameters); 
    } 

    private class DownloadImageTask extends AsyncTask<param, param, param> { 
     protected param doInBackground(param... params) { 
         //logging-in  
        } 
     protected void onPostExecute(your_result) { 
        if (YourActivity.this.pd != null) { 
         YourActivity.this.pd.dismiss(); 
        } 
       } 
    } 
    } 
関連する問題