错误原因:非UI线程中直接操作UI线程。 错误分析:当每个应用程序apk第一次启动时,Android会同时启动一个对应的主线程(Main Thread),主线程负责处理与UI相关的事件,……
错误原因:非UI线程中直接操作UI线程。
错误分析:当每个应用程序apk第一次启动时,Android会同时启动一个对应的主线程(Main Thread),主线程负责处理与UI相关的事件,如:用户的按键事件,用户接触屏幕的事件以及屏幕绘图事件,并把相关的事件分发到对应的组件进行处理,所以主线程通常又被叫做UI线程。开发Android应用时必须遵守单线程模型的原则:Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行,如果在非UI线程中直接操作UI线程,会抛出android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views,这与普通的java程序不同。由于UI线程负责事件的监听和绘图,因此,必须保证UI线程能够随时响应用户的需求,UI线程里的操作应该向中断事件那样短小,费时的操作(如网络连接)需要另开线程,否则,如果UI线程超过5s没有响应用户请求,会弹出对话框提醒用户终止应用程序(ANR)。如果在新开的线程中需要对UI进行设定,就可能违反单线程模型,因此android采用一种的Message Queue机制保证线程间通信。
解决方案:采用消息机制。
还没有评论呢,快来抢沙发~