2012-01-10 22 views
1

我一直在工作的Android應用程序,並在模擬器上測試它。此應用程序的某些部分需要一些處理時間,例如登錄,可能需要長達10秒。如果應用程序正在處理登錄,並且我在模擬器屏幕上的任意位置單擊,它將導致應用程序崩潰 - >強制關閉/等待窗口將彈出,即使我選擇等待,此登錄過程也永遠不會完成。
Android模擬器崩潰,如果點擊時處理

我想知道有其他人遇到這種情況嗎?我能做些什麼來避免用戶在處理過程中點擊並使程序崩潰?或者在真實的手機上,這不是問題?

謝謝!

編輯:這確實是一個UI線程的問題,我使用的是單聲道爲Android編寫這個程序,我在我的問題出使用介紹Here!

編輯方法排序: 這是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} [email protected] 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} [email protected] 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 
+0

有沒有關於LogCat的任何信息可能的原因導致這樣的崩潰? – harism 2012-01-11 00:02:49

+2

你確定這是一個崩潰?也許你只是在UI線程中進行處理,並且你的應用程序掛起(因此,出現強制關閉選項的窗口)。 – user1234567 2012-01-11 00:23:51

+0

感謝@ user1234567,我對android很陌生,所以你的意思是我不能在UI線程中處理,否則會出現這種情況? – lynnyilu 2012-01-11 00:38:20

回答

4

好的機會是你可能會導致UI線程掛起由於這一重處理 - 但我可以在沒有看到任何代碼的提示 - 提示 - 。你可能放重的東西變成一個後臺線程單獨的GUI線程,你正在運行。

幸運的是,Android已經在AsyncTask類來幫助你在這裏。可以說(因爲問題中沒有足夠的細節),您通過向服務器發出Web請求來登錄到您的應用程序。當用戶按下登錄按鈕時,您想要在後臺線程中完成所有工作時顯示某種處理消息。

看看這篇文章特別的AsyncTask例如http://www.vogella.de/articles/AndroidPerformance/article.html

可以看到,doInBackground()是所有繁重的任務完成,並且postExecute()在UI線程中運行再次,這是您將根據剛剛發生的結果更新UI。例如,用戶登錄成功或在登錄時發生錯誤。

我可以繼續相當一段時間,但是這是有據可查的。谷歌自己的另一個好帖子可以在這裏找到http://android-developers.blogspot.com/2009/05/painless-threading.html

+0

謝謝,我認爲你是一個很好的觀點,因爲我我做了相當一些繁重的處理,我正在將一個Windows .NET應用程序轉換爲android,曾經有一個BackgroundWorker用於在後臺處理這個問題,所以我認爲這可能是問題所在。感謝您提供的所有信息!我會嘗試一下! – lynnyilu 2012-01-11 01:02:55

+0

謝謝,這是一個很好的答案,這正是我的問題所在。不過,我使用Mono for Android來編寫應用程序(因爲我從來沒有提到過,所以你不知道),在我的情況下使用AsyncTask可能有點複雜。我已經使用[Click Here](http://www.gregshackles)中介紹的方法來整理我的問題。COM/2011/04 /使用背景線程功能於單換的Android的應用程序/評論頁-1 /#評論 - 1872年),只爲那些誰也使用單聲道和有同樣的問題。非常感謝你!!乾杯!! – lynnyilu 2012-01-11 04:01:08