- 当一个应用程序启动之后,Android系统会为这个应用程序创建一个主线程。这个线程非常重要,它负责渲染视图,分发事件到响应监听器并执行,对界面进行轮询的监听。因此,一般也叫做“UI线程”。
- Android系统不会给应用程序的多个元素组件,建立多个线程来执行。一个视图(activity)中的多个view组件运行在同一个UI线程当中。因此,多个view组件的监听器的执行可能会相互影响。
- 例如:当在UI线程当中执行耗时操作,比如访问网络,访问数据库等。则会导致UI线程阻塞。当UI线程阻塞,则屏幕会出现卡死情况。这样用户体验非常差。当线程阻塞超多5秒以后,Android系统有可能进行干预,弹出对话框询问是否关闭应用程序。
Android的UI两条规则:there are simply two rules to Android’s single thread model:
- Do not block the UI thread 不要阻塞UI线程
- Do not access the Android UI toolkit from outside the UI thread. 不要在UI线程之外的其他线程中对视图当中的组件进行设置。注意是对组件进行设置,组件,组件。不是组件的话继续这么干。
经典异常:
Only the original thread that created a view hierarchy can touch its views.
只有创建view的那个线程才能对其进行修改。
如何在其他线程当中修改view?
解决方案1: view.post()
解决方案2: Async
Thread.currentThread.getId(); 打印当前线程的ID。