关于Android的UI非线程安全
来源:互联网 发布:电脑网络节点 编辑:程序博客网 时间:2024/05/17 06:53
今天偶尔在网上看到这边文章 http://hold-on.iteye.com/blog/991403
1、我们都知道,在Android的开发中,非UI线程不能操作UI线程中的控件,即UI是非线程安全的;
2、但是在工作线程(非UI线程)中调用ProgressBar控件的setProgress(int count)方法时,程序运行并
不会出现异常,
3、但是如调用setBackGround(int color)或者setVisibility(int v)时,程序运行后出现异常
4、第一和第三点说的通,但是第二点不能理解
问题:谁能给“在工作线程中操作主线程UI”下个定义,比如上面的setProgress是操作UI吗?一般性判定原则是什么?
其实这是一个典型的多线程的安全问题,当然在Android中也不能列外。在大多数应用程序中,我们通常会有一个UI线程,即Android的UI Looper线程,还有一个通讯线程,负责和服务器端的交互。
那么为什么在非UI线程中可以调用ProgressBar呢?因为ProgressBar控件属于非UI线程的变量,它为非UI线程所有,不存在多线程共享数据的问题;而在非UI线程中调用setBackGround(int color)等方法,就涉及到调用UI线程的Context等变量的问题,这样就存在线程安全的隐患。
其实计算机科学中很多基本的原理都是相通的,无非是变换一个实现的角度而已,遇到问题需要多思考一下!
- 关于Android的UI非线程安全
- Android的线程安全与UI线程
- 关于PHP线程安全和非线程安全的区别
- 关于PHP线程安全和非线程安全的区别
- 关于android不能在非UI线程更改UI
- Android非UI线程访问UI线程的方法总结
- android UI操作不是线程安全的
- Android UI线程和非UI线程
- Android UI线程和非UI线程
- Android UI线程和非UI线程
- Android UI线程和非UI线程
- Android UI线程和非UI线程
- Android UI线程和非UI线程
- Android UI线程和非UI线程
- Android UI线程和非UI线程
- Android UI线程和非UI线程
- Android UI线程和非UI线程
- Android UI线程和非UI线程
- 给MFC程序添加文件拖放处理
- vim菜鸟学习-基础篇1(像记事本一样使用vim)
- 学习笔记:自定义样式(style)与主题(theme)
- delphi 内存 复制
- hive使用mysql存储元数据
- 关于Android的UI非线程安全
- ThreadLocal
- 一起学Windows Phone 7开发(六.Isolate Storage)
- SQLite的SQL语法
- java nio的学习-4
- 设计模式之单一职责原则学习
- 赢在电子商务网站制作与营销:B2C版
- 完全用linux工作
- CSS3 图片样式