Android UI线程
2016-09-18 10:47
519 查看
一:
1,当一个应用程序启动之后,android 系统会为这个应用程序创建一个主线程,这个线程非常重要,它负责渲染视图,分发事件到响应监听器并执行,对界面进行轮询的监听,因此,一般也叫做“UI线程”
2,android 系统不会给应用程序的多个元素组件,建立多个线程来执行,一个视图(activity)中的多个view组件运行在同一个UI线程当中。因此,多个View组件的监听器的执行可能会相互影响。
例如:当在UI线程当中执行耗时操作,比如访问网络,访问数据库等等,则会导致UI线程阻塞。当UI线程阻塞,则屏幕会出现卡死现象,这样用户体验就会感觉非常差,当线程阻塞超过5s以后,android 系统则会进行干预,弹出对话框进行询问是否关闭应用程序。
new Thread(new Runable(){
@override
public void run(){
try{
Thread.sleep(10000);
}catch(Exception e){
e.printStackTeace();
}
}
}){
}.start();
谷歌官方提供了两个规则:
1,不要阻塞UI线程(用户体验差)
2,不要在UI线程之外的其他线程中对视图当中的组件进行设置(报异常)
解决方式:
1,view.post()
2,Asynctask()
1,当一个应用程序启动之后,android 系统会为这个应用程序创建一个主线程,这个线程非常重要,它负责渲染视图,分发事件到响应监听器并执行,对界面进行轮询的监听,因此,一般也叫做“UI线程”
2,android 系统不会给应用程序的多个元素组件,建立多个线程来执行,一个视图(activity)中的多个view组件运行在同一个UI线程当中。因此,多个View组件的监听器的执行可能会相互影响。
例如:当在UI线程当中执行耗时操作,比如访问网络,访问数据库等等,则会导致UI线程阻塞。当UI线程阻塞,则屏幕会出现卡死现象,这样用户体验就会感觉非常差,当线程阻塞超过5s以后,android 系统则会进行干预,弹出对话框进行询问是否关闭应用程序。
new Thread(new Runable(){
@override
public void run(){
try{
Thread.sleep(10000);
}catch(Exception e){
e.printStackTeace();
}
}
}){
}.start();
谷歌官方提供了两个规则:
1,不要阻塞UI线程(用户体验差)
2,不要在UI线程之外的其他线程中对视图当中的组件进行设置(报异常)
解决方式:
1,view.post()
2,Asynctask()
相关文章推荐
- Continue和Break作用
- 使用method swizzling实现根据屏幕尺寸自适应Font字体大小
- AndroidStudio-Eat-Guide—— 3.Android Stuido与SDK更新
- Unreal Engine 4 —— PhysFlying时动态物体的物理碰撞bug分析与解决方案
- Android:联系人Contacts之ContentResolver query 参数详解
- Java中String,StringBuffer与StringBuilder的差别
- 根据字符串的长度动态的改变单元格的高度
- 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
- iOS 中UI控件的各种对齐方式总结
- Mac sudo: no valid sudoers sources found, quitting
- Android编译系统详解(一)——build/envsetup.sh
- Xcode 8 证书管理 Signing for "xxxx" requires a development team.
- 5-String、StringBuffer和StringBuiler
- 使用 gradle 在编译时动态设置 Android resValue / BuildConfig / Manifes中<meta-data>变量的值
- Caffe: Data layer prefetch queue empty
- UGUI内核大探究(十三)Dropdown
- Android系列之UI组件----Menu菜单
- [Angular 2] Understanding OpaqueToken
- [Angular 2] Value Providers & @Inject
- GUI编程