为了账号安全,请及时绑定邮箱和手机立即绑定

在onCreate中起一个线程来更新UI可能会正常运行

因为 [检查更新UI是否在主线程中]的ViewRootImpl对象是在Activity的onResume方法中被创建出来的. 所在在onCreate中起一个线程来更新UI可能会正常运行的。怎么感觉这个说法有点牵强,可能会运行,为什么加了休眠后就不能正常执行,感觉还是有点疑惑。

正在回答

6 回答

在没有进行判断是否为主线程之前改变UI是可行的

0 回复 有任何疑惑可以回复我~

再补充一点,线程的运行其实是以时间片为单位的,出现这种情况,可能是因为在主线程的一个时间片内,onResume方法并没有执行,所以,就没有创建出那个ViewRootImpl对象,所以子线程中的操作才更新了ui线程

0 回复 有任何疑惑可以回复我~

就是多线程的并发问题,如果两个线程是同步的,可能就不会出现这样的情况了。。不知道对不对 @nate~

0 回复 有任何疑惑可以回复我~

好像有点懂了,谢谢了,我以前一直以为主线程是最先执行的,且执行了的线程就会一直执行完成,我去看看多线程的知识,非常感谢!

0 回复 有任何疑惑可以回复我~

那为什么同样是先开启了一个线程,为什么没休眠的那个线程就会执行且不报错,难道没休眠的那个自己创建的线程还能比UI线程先执行

0 回复 有任何疑惑可以回复我~
#1

nate~

是的,cpu执行线程的时间是随机的,我加了休眠就是为了要保证,让线程中的代码稍后执行,在onResume方法调用完执行,再次强调一下啊,好好复习一下多线程的相关知识
2015-04-29 回复 有任何疑惑可以回复我~

很简单,因为你自己新开启了一个线程,在线程当中休眠了一段时间,你要明白Activity 的生命周期方法是在UI线程当中调用的,当你的Activity执行完OnResume方法后,你开启的线程获得cpu执行的时候,发现当前线程当中已经有的ViewRootImpl,所以ViewRootImpl要对当前子线程的方法进行校验,也就报错了,这个是多线程问题,你可以看看多线程相关资料

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Android面试常客Handler详解
  • 参与学习       54881    人
  • 解答问题       183    个

学Android开发,必学Handler,也是Android面试常客

进入课程

在onCreate中起一个线程来更新UI可能会正常运行

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信