Сбой эмулятора Android при нажатии во время обработки - PullRequest
1 голос
/ 11 января 2012

Я работал над приложением для Android и тестировал его на эмуляторе.Части этого приложения требуют некоторого времени обработки, например входа в систему, может занять до 10 секунд.Если приложение обрабатывает вход в систему, и я щелкнул в любом месте экрана эмулятора, это приведет к сбою приложения -> появится окно принудительного закрытия / ожидания, и даже если я решу подождать, этот процесс входа никогда не завершится.

Интересно, кто-нибудь еще сталкивался с такой ситуацией?Что я могу сделать, чтобы пользователь не нажал кнопку во время обработки и не завершил работу программы?Или на реальном телефоне это не проблема?

Спасибо!

РЕДАКТИРОВАТЬ: Это действительно проблема потока пользовательского интерфейса, и я использую Mono для Android, чтобы написать это приложение, я сортирую свойвыдает с использованием введенных методов Здесь!

РЕДАКТИРОВАТЬ: это сообщения LOGCAT

1-11 00:38:49.165 W/WindowManager(   59): Key dispatching timed out sending to BadumnaAndroidApi1.BadumnaAndroidApi1/badumnaandroidapi1.Activity1
01-11 00:38:49.165 W/WindowManager(   59): Previous dispatch state: {{KeyEvent{action=1 code=66 repeat=0 meta=0 scancode=28 mFlags=8} to Window{44ed87d0 BadumnaAndroidApi1.BadumnaAndroidApi1/badumnaandroidapi1.Activity1 paused=false} @ 1326241690617 lw=Window{44ed87d0 BadumnaAndroidApi1.BadumnaAndroidApi1/badumnaandroidapi1.Activity1 paused=false} lb=android.os.BinderProxy@4508a900 fin=false gfw=true ed=true tts=0 wf=false fp=false mcf=Window{44ed87d0 BadumnaAndroidApi1.BadumnaAndroidApi1/badumnaandroidapi1.Activity1 paused=false}}}
01-11 00:38:49.175 W/WindowManager(   59): Current dispatch state: {{null to Window{44ed87d0 BadumnaAndroidApi1.BadumnaAndroidApi1/badumnaandroidapi1.Activity1 paused=false} @ 1326242329174 lw=Window{44ed87d0 BadumnaAndroidApi1.BadumnaAndroidApi1/badumnaandroidapi1.Activity1 paused=false} lb=android.os.BinderProxy@4508a900 fin=false gfw=true ed=true tts=0 wf=false fp=false mcf=Window{44ed87d0 BadumnaAndroidApi1.BadumnaAndroidApi1/badumnaandroidapi1.Activity1 paused=false}}}
01-11 00:38:49.276 I/Process (   59): Sending signal. PID: 316 SIG: 3
01-11 00:38:49.276 I/dalvikvm(  316): threadid=3: reacting to signal 3
01-11 00:38:49.485 I/dalvikvm(  316): Wrote stack traces to '/data/anr/traces.txt'
01-11 00:38:49.485 I/Process (   59): Sending signal. PID: 59 SIG: 3
01-11 00:38:49.485 I/dalvikvm(   59): threadid=3: reacting to signal 3
01-11 00:38:49.595 I/dalvikvm(   59): Wrote stack traces to '/data/anr/traces.txt'
01-11 00:38:49.616 I/Process (   59): Sending signal. PID: 114 SIG: 3
01-11 00:38:49.616 I/dalvikvm(  114): threadid=3: reacting to signal 3
01-11 00:38:49.625 I/dalvikvm(  114): Wrote stack traces to '/data/anr/traces.txt'
01-11 00:38:49.636 I/Process (   59): Sending signal. PID: 107 SIG: 3
01-11 00:38:49.645 I/dalvikvm(  107): threadid=3: reacting to signal 3
01-11 00:38:49.655 I/dalvikvm(  107): Wrote stack traces to '/data/anr/traces.txt'
01-11 00:38:49.673 I/Process (   59): Sending signal. PID: 254 SIG: 3
01-11 00:38:49.865 I/dalvikvm(  254): threadid=3: reacting to signal 3
01-11 00:38:49.875 I/Process (   59): Sending signal. PID: 246 SIG: 3
01-11 00:38:49.906 I/dalvikvm(  246): threadid=3: reacting to signal 3
01-11 00:38:50.085 I/Process (   59): Sending signal. PID: 177 SIG: 3
01-11 00:38:50.115 I/dalvikvm(  177): threadid=3: reacting to signal 3
01-11 00:38:50.285 I/Process (   59): Sending signal. PID: 221 SIG: 3
01-11 00:38:50.345 I/dalvikvm(  221): threadid=3: reacting to signal 3
01-11 00:38:50.495 I/Process (   59): Sending signal. PID: 169 SIG: 3
01-11 00:38:50.575 I/dalvikvm(  169): threadid=3: reacting to signal 3
01-11 00:38:50.695 I/Process (   59): Sending signal. PID: 185 SIG: 3
01-11 00:38:50.735 I/dalvikvm(  185): threadid=3: reacting to signal 3
01-11 00:38:50.905 I/Process (   59): Sending signal. PID: 111 SIG: 3
01-11 00:38:50.905 I/dalvikvm(  111): threadid=3: reacting to signal 3
01-11 00:38:51.065 I/dalvikvm(  111): Wrote stack traces to '/data/anr/traces.txt'
01-11 00:38:51.065 I/Process (   59): Sending signal. PID: 205 SIG: 3
01-11 00:38:51.185 I/dalvikvm(  205): threadid=3: reacting to signal 3
01-11 00:38:51.275 I/Process (   59): Sending signal. PID: 194 SIG: 3
01-11 00:38:51.405 I/dalvikvm(  194): threadid=3: reacting to signal 3
01-11 00:38:51.485 I/Process (   59): Sending signal. PID: 155 SIG: 3
01-11 00:38:51.605 I/dalvikvm(  155): threadid=3: reacting to signal 3
01-11 00:38:51.685 I/Process (   59): Sending signal. PID: 149 SIG: 3
01-11 00:38:51.875 I/dalvikvm(  149): threadid=3: reacting to signal 3
01-11 00:38:51.885 I/Process (   59): Sending signal. PID: 115 SIG: 3
01-11 00:38:51.916 I/dalvikvm(  115): threadid=3: reacting to signal 3

1 Ответ

4 голосов
/ 11 января 2012

Хорошо, есть вероятность, что вы могли бы вызывать зависание потока пользовательского интерфейса из-за этой тяжелой обработки, но я мог бы уйти, не увидев никакого кода -hint-.

К счастью, Android имеет класс AsyncTask для того, чтобы вы могли поместить тяжелые вещи в фоновый поток, отдельный от потока GUI.помочь вам здесьДопустим, (поскольку в вопросе недостаточно подробностей) вы входите в свое приложение, отправляя веб-запрос на сервер.Когда пользователь нажимает на кнопку входа, вы хотите показать какую-то обработку сообщения при выполнении всей работы в фоновом потоке.

Посмотрите на эту статью, в частности пример AsyncTask http://www.vogella.de/articles/AndroidPerformance/article.html

Вы можете видеть, что doInBackground () - это место, где выполняются все тяжелые работы, и что postExecute () снова запускается в потоке пользовательского интерфейса, где вы захотите обновить пользовательский интерфейс в зависимости от того, что только что произошло.Например, пользователь успешно вошел в систему или произошла ошибка при входе в систему.

Я мог бы продолжаться довольно долго, однако это хорошо задокументировано.Еще один хороший пост от Google можно найти здесь http://android -developers.blogspot.com / 2009/05 / painless-threading.html

...