如果点击在处理Android模拟器崩溃 [英] Android emulator crash if click while processing

查看:173
本文介绍了如果点击在处理Android模拟器崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直工作在一个Android应用程序,并在模拟器上进行测试。这个应用程序的某些部分需要一定的处理时间,如登录,可能需要长达10秒。如果应用程序正在处理登录,我点击了模拟器的屏幕上的任何位置,这将导致应用程序崩溃 - >力关闭/等待窗口会弹出,甚至我选择等待,这个登录过程将永远不会完成。

我不知道别的任何人遇到这种情况?我能做什么,以避免在加工过程中用户点击和程序崩溃?或在真正的手机是不是有问题?

谢谢!

编辑:这确实是一个UI线程的问题,我使用的是单声道为Android编写这个程序,我使用的方法介绍了<排序我的问题出href="http://www.gregshackles.com/2011/04/using-background-threads-in-mono-for-android-applications/comment-page-1/#comment-1872"相对=nofollow>在这里!

编辑: 这是logcat的消息

  1-11 00:38:49.165 W /窗口管理器(59):重点调度超时发送到BadumnaAndroidApi1.BadumnaAndroidApi1 / badumnaandroidapi1.Activity1
01-11 00:38:49.165 W /窗口管理器(59):previous调度状态:{{{的KeyEvent行动= 1 code = 66重复= 0元= 0扫描code = 28 mFlags = 8}于窗口{44ed87d0 BadumnaAndroidApi1.BadumnaAndroidApi1 / badumnaandroidapi1.Activity1暂停= FALSE} @ 1326241690617 LW =窗口{44ed87d0 BadumnaAndroidApi1.BadumnaAndroidApi1 / badumnaandroidapi1.Activity1暂停= FALSE} lb=android.os.BinderProxy@4508a900鳍=假GFW =真ED =真正的TTS = 0 WF =假FP =假千立方英尺=窗口{44ed87d0 BadumnaAndroidApi1.BadumnaAndroidApi1 / badumnaandroidapi1.Activity1暂停= FALSE}}}
01-11 00:38:49.175 W /窗口管理器(59):当前调度状态:{{空于窗口{44ed87d0 BadumnaAndroidApi1.BadumnaAndroidApi1 / badumnaandroidapi1.Activity1暂停= FALSE} @ 1326242329174 LW =窗口{44ed87d0 BadumnaAndroidApi1.BadumnaAndroidApi1 / badumnaandroidapi1。暂停活动1 = FALSE} lb=android.os.BinderProxy@4508a900鳍=假GFW =真正​​的ED =真正的TTS = 0 WF =假FP =假千立方英尺=窗口{44ed87d0 BadumnaAndroidApi1.BadumnaAndroidApi1 / badumnaandroidapi1.Activity1暂停= FALSE}}}
01-11 00:38:49.276的I /工艺(59):发送信号。 PID:316 SIG:3
01-11 00:38:49.276的I / dalvikvm(316):主题ID = 3:反应以信号3
01-11 00:38:49.485的I / dalvikvm(316):写堆栈跟踪到/data/anr/traces.txt
01-11 00:38:49.485的I /工艺(59):发送信号。 PID:59 SIG:3
01-11 00:38:49.485的I / dalvikvm(59):主题ID = 3:反应以信号3
01-11 00:38:49.595的I / dalvikvm(59):写堆栈跟踪到/data/anr/traces.txt
01-11 00:38:49.616的I /工艺(59):发送信号。 PID:114 SIG:3
01-11 00:38:49.616的I / dalvikvm(114):主题ID = 3:反应以信号3
01-11 00:38:49.625的I / dalvikvm(114):写堆栈跟踪到/data/anr/traces.txt
01-11 00:38:49.636的I /工艺(59):发送信号。 PID:107 SIG:3
01-11 00:38:49.645的I / dalvikvm(107):主题ID = 3:反应以信号3
01-11 00:38:49.655的I / dalvikvm(107):写堆栈跟踪到/data/anr/traces.txt
01-11 00:38:49.673的I /工艺(59):发送信号。 PID:254 SIG:3
01-11 00:38:49.865的I / dalvikvm(254):主题ID = 3:反应以信号3
01-11 00:38:49.875的I /工艺(59):发送信号。 PID:246 SIG:3
01-11 00:38:49.906的I / dalvikvm(246):主题ID = 3:反应以信号3
01-11 00:38:50.085的I /工艺(59):发送信号。 PID:177 SIG:3
01-11 00:38:50.115的I / dalvikvm(177):主题ID = 3:反应信号3
01-11 00:38:50.285的I /工艺(59):发送信号。 PID:221 SIG:3
01-11 00:38:50.345的I / dalvikvm(221):主题ID = 3:反应以信号3
01-11 00:38:50.495的I /工艺(59):发送信号。 PID:169 SIG:3
01-11 00:38:50.575的I / dalvikvm(169):主题ID = 3:反应信号3
01-11 00:38:50.695的I /工艺(59):发送信号。 PID:185 SIG:3
01-11 00:38:50.735的I / dalvikvm(185):主题ID = 3:反应以信号3
01-11 00:38:50.905的I /工艺(59):发送信号。 PID:111 SIG:3
01-11 00:38:50.905的I / dalvikvm(111):主题ID = 3:反应以信号3
01-11 00:38:51.065的I / dalvikvm(111):写堆栈跟踪到/data/anr/traces.txt
01-11 00:38:51.065的I /工艺(59):发送信号。 PID:205 SIG:3
01-11 00:38:51.185的I / dalvikvm(205):主题ID = 3:反应以信号3
01-11 00:38:51.275的I /工艺(59):发送信号。 PID:194 SIG:3
01-11 00:38:51.405的I / dalvikvm(194):主题ID = 3:反应信号3
01-11 00:38:51.485的I /工艺(59):发送信号。 PID:155 SIG:3
01-11 00:38:51.605的I / dalvikvm(155):主题ID = 3:反应信号3
01-11 00:38:51.685的I /工艺(59):发送信号。 PID:149 SIG:3
01-11 00:38:51.875的I / dalvikvm(149):主题ID = 3:反应信号3
01-11 00:38:51.885的I /工艺(59):发送信号。 PID:115 SIG:3
01-11 00:38:51.916的I / dalvikvm(115):主题ID = 3:反应以信号3
 

解决方案

好机会是您可能会导致UI线程由于挂 - 但我可以做的路要走没有这个沉重的处理看到任何code -hint-。什么您可能放重的东西变成一个后台线程单独的GUI线程,您可以在当前正在运行。

幸运的是,Android已经在的AsyncTask 类来帮助你在这里。比方说(因为没有足够的细节的问题),你是通过一个网络请求到服务器登录到你的应用程序。当用户presses登录你想显示某种处理消息的同时做所有的跑腿在你的后台线程。

看看这篇文章,特别是AsyncTask的例子 HTTP://www.vogella .DE /用品/ AndroidPerformance / article.html

您可以看到,doInBackground()是所有繁重的任务已经完成,该postExecute()运行在UI线程再次,这就是你将要更新基础上,刚刚发生了什么结果的用户界面。例如,用户登录成功地或在登录发生错误。

我可以继续下去相当长的一段时间但是这是有据可查的。 // Android的开发者:另一个好后由谷歌自己可以在这里 HTTP发现.blogspot.com / 2009/05 /无痛-threading.html

I've been working on an android app and test it on the emulator. Parts of this app require some processing time, such as login, could take up to 10 seconds. If the app is processing the login, and I clicked anywhere on the emulator screen, it will cause the app to crash -> a force close/wait window will pop up and even I choose to wait, this login process will never complete.

I wonder did anybody else encounter this situation? What could I do to avoid user clicking during processing and crash the program? Or on a real phone it is not a problem?

Thanks!

EDIT: This is indeed a UI thread problem and I'm using Mono for Android to write this app, I sort my issues out using methods introduced Here!

EDIT: this is the LOGCAT messages

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

解决方案

Ok the chances are you might be causing the UI thread to hang due to this heavy processing -but I could be way off without seeing any code -hint-. What you might is put the heavy stuff into a background thread seperate to the GUI thread, which you are currently running in.

Luckily Android has the AsyncTask class to help you here. Lets say (as there is not enough detail in the question) you are logging in to your app by making a web request to a server. When the user presses login you want to show some sort of processing message while doing all the legwork in your background thread.

Take a look at this article in particular the AsyncTask example http://www.vogella.de/articles/AndroidPerformance/article.html

You can see that doInBackground() is where all the heavy lifting is done and that postExecute() runs in the UI thread once again, which is where you will want to update the UI based on the result of what just happened. For example the user logged in sucessfully or an error occured while logging in.

I could go on for quite some time however this is well documented. Another good post by Google themselves can be found here http://android-developers.blogspot.com/2009/05/painless-threading.html

这篇关于如果点击在处理Android模拟器崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆