Экран Android AVD временно зависает при вызове JSON для входа - PullRequest
0 голосов
/ 19 февраля 2012

У меня есть экран входа в систему, который я использую для своего приложения. Он вызывает JSON для проверки правильности имени пользователя / пароля, если это так, он регистрирует их, и они направляются в главное меню. Однако, поскольку для входа в систему требуется около 10-15 секунд, я добавил очень простой виджет «Индикатор выполнения», который показывает, что он фактически выполняет вход (чтобы пользователь не запутался). Однако всякий раз, когда я тестирую его на эмуляторе и захожу в систему, экран входа в систему, кажется, зависает, а затем через 10-15 секунд он входит в систему просто замечательно, но индикатор выполнения никогда не отображается, потому что экран AVD зависает. У меня есть это, чтобы установить себя видимым, когда сделан вызов JSON. Если я вернусь к экрану входа в систему после успешного входа в систему, индикатор выполнения появится и будет отображаться нормально.

Какие-нибудь советы о том, как это исправить? Спасибо, ребята!

Ответы [ 2 ]

4 голосов
/ 20 февраля 2012

Я рекомендую вам использовать AsyncTask для выполнения длительных операций взятия. А для уведомления пользователя используйте ProgressBar или AlertDialog или любой другой уведомитель, который соответствует вашим потребностям.

Вам следует подумать о медленных сетях (2G, 3G) и возможных скоростях передачи данных, что бы ни замедляло работу.

Ваш код должен обрабатывать длительные операции принятия в другом потоке пользовательского интерфейса (что, в сущности, Activity, поток пользовательского интерфейса).

Чтобы понять использование и цель 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 голос
/ 20 февраля 2012

Попробуйте использовать что-то вроде этого, если вы входите, например, в метод 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();
                   }
                }
     }
  } 
...