Android中子线程操作UI的问题
最近几天再刷《App研发录》,第6章中一个在子线程操作UI的方法深深困扰了我,求大神解释。
具体代码如下(在子线程中显示一个AlertDialog):
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(new Runnable() {
@Override
public void run() {
// 添加睡眠代码,防止没有check
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Looper.prepare();
new AlertDialog.Builder(MainActivity.this).setTitle("title").setMessage("message")
.setPositiveButton("sure", null).show();
Looper.loop();
}
}).start();
}
楼主也是一个深入分析过Handler,Looper源码的人,但是不能理解在子线程中构建了一个Looper,new AlertDialog还是在子线程显示了,并没有被抛到主线程中执行,为什么能不报错呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这个没问题,因为UI的执行环境是与Looper所在的线程一致的,你的Looper.prepare();是在子线程中调用的,那么这个Looper就是属于该子线程,所以AlertDialog才会在子线程显示。你如果想在主线程显示,你可以在主线程中生成一个Handler,然后在子线程中调用handler.post()方法。