new的Runnable为什么不是在主线程里运行的?

中才德创 2015-11-25 02:08:13
一直以为,new Runnable一定是开了个子线程。刚写了个小demo测试,发现卡住了主UI的显示,说明并非开了个线程。这是什么回事?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EventBus.getDefault().register(this);
handler.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
AvcLog.printV(TAG, "Sleep is called before");
try {
Thread.sleep(30000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
AvcLog.printV(TAG, "Sleep is called later");
}
});
}
...全文
451 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
柒加伊 2015-12-04
  • 打赏
  • 举报
回复
protected void onCreate(Bundle savedInstanceState) 方法本身就是主线程, 你在主线程里面调用handle那不还是主线程么 ... =.=!
huangxiaohu_coder 2015-12-01
  • 打赏
  • 举报
回复
正如楼上的所说,Runable只是给你接口让你实现工作线程的工作事务,然后附加到你new thread的线程上或post的线程中,其本身并不会创建线程
csdn_faith 2015-11-30
  • 打赏
  • 举报
回复
为什么new Runnable就是开了一个线程,它只是一个接口而已,楼主惯性思维! 先了解下Android Framework layer的消息机制:起点从ActivityThread.java main方法中,启动一个Loop,Loop中包含一个MessageQueue,不断从里面取element, 再看发送,就是将handler设置成为Message.target,将Runnable设置为Message.callback的绑定起来,以便MessageQueue处理。最后走到Handler.dispatchMessage(), if (msg.callback != null) { handleCallback(msg); } else { if (mCallback != null) { if (mCallback.handleMessage(msg)) { return; } } handleMessage(msg); } 最后走到message.callback.run(); 其实跟线程半毛钱关系都没有,只是一个Runnable的匿名内部类。 想要提高,就看看framework layer代码,甚至native layer,不是只写写界面,玩玩四大组件就完事!
jklwan 2015-11-26
  • 打赏
  • 举报
回复
这个线程其实是在UI线程之内运行的,并没有新建线程。 新建一个线程用 Thread thread = new Thread(); thread.start(); 参考资料http://blog.sina.com.cn/s/blog_77c6324101016jp8.html
中才德创 2015-11-26
  • 打赏
  • 举报
回复
为什么大家说法不一致啊?
wei220000 2015-11-25
  • 打赏
  • 举报
回复
handler只是一个回调,用来处理主线程,Runnable总是新建一个线程,那么肯定是子线程。卡住的关键是handler的post,他本身的作用是阻塞handler所在线程啊。runnable不结束,handler就一直post。
中才德创 2015-11-25
  • 打赏
  • 举报
回复
那是不是可以这么说:handler在UI线程,handler.post(new Runnable()所发出的,一定也在UI线程?
sagittarius1988 2015-11-25
  • 打赏
  • 举报
回复
因为handler也是在UI线程里

80,360

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧