多线程相关知识


关于线程进程的理解一个例子:
进程:计算机核心cpu,如同一个工厂,时刻工作。但是工厂资源有限,一次只能运行一个车间(进程)。一个cup一次只能运行一个任务。
线程:一个车间里面包含很多员工,(线程)车间的空间对全部工人开发(每个线程都可以使用这些共享内存)。
但是空间有限,例如一个人在厕所,只能等待,为了不让别人打扰就需要上锁。自己结束后其他人在运行(一些内存资源读写时候必须一个线程结束后其他线程才可以使用资源)

操作系统的设计,因此可以归结为三点:
(1)以多进程形式,允许多个任务同时运行;
(2)以多线程形式,允许单个任务分成不同的部分运行;



android的多线程工作。
java默认只有一个进程。主进程,android也是一样,只有一个主进程。主要负责界面交互。保证用户随时交互相应。
耗时操作必须开启一个工作线程,子线程。如果在主线程工作,会出现经典的ANR错误了。
为什么只能主线程更新ui?
为了安全, ui访问是没有锁的,多个线程访问ui出现各类不可控情况了,所以交给主线程控制最为安全。
子线程也可以更新ui!
有常规情况就会有例外!
1.SurfaceView是 android 里唯一一个可以在子线程更新的控件。SurfaceView绘制频繁,如果用主线程,很可能会堵塞。
为了提高效率。
2.在onceate中任何线程都可以操作ui,原因是 ViewRoot是判断线程的,但是ViewRoot在onResume()后才会产生。所以onCreate()可以无视这个规则。不过这个属于知道不要用到的方法,不然使用后,只要执行超过5s马上anr了。

总结:Android中多线程如果工作。ActivityThread是app的开始,初始化相关东西,其中会初始化一个死循环looper,他的核心就是不停的从 MessageQueue获取到最新的消息展示到ui上。android中耗时操作在工作现场完成后都会通过message发送到MessageQueue等待后续的执行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值