非UI线程使用setVisibility发生的bug
2016-04-01 00:00
537 查看
摘要: 非UI线程使用setVisibility
1. 该方法用来设置view的可见性,需要在UI线程中设置
2. 该方法的内部实现中判断了当前view的可见性,改变时在调用invalidateSelf方法刷新自己
注意:在非UI线程中,如果调用invalidate需要刷新界面的,都会报错。如果在非UI线程中调用setVisibility方法,但visible没有改变,则不会执行invalidateSelf方法,就不会报错,只有状态改变时才会报错,所以要特别注意。
1. 该方法用来设置view的可见性,需要在UI线程中设置
2. 该方法的内部实现中判断了当前view的可见性,改变时在调用invalidateSelf方法刷新自己
注意:在非UI线程中,如果调用invalidate需要刷新界面的,都会报错。如果在非UI线程中调用setVisibility方法,但visible没有改变,则不会执行invalidateSelf方法,就不会报错,只有状态改变时才会报错,所以要特别注意。
System.out.println("1 " + Thread.currentThread().getName()); Toast.makeText(getBaseContext(), "1 " + Thread.currentThread().getId(), Toast.LENGTH_SHORT).show(); txt.setVisibility(View.GONE); new Thread(new Runnable() { @Override public void run() { System.out.println("2 " + Thread.currentThread().getName()); // 看线程名称,已经不是主线程,但不明白为什么设置setVisibility不会报错,而Toast会报错 // 原因是还没有初始化界面完成,如果在线程中延迟几秒,就会发出错误了。 //Toast.makeText(getBaseContext(), "2 " + Thread.currentThread().getId(), Toast.LENGTH_SHORT).show(); txt.setVisibility(View.VISIBLE); } }).start(); Button btn = (Button) findViewById(R.id.btn); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Thread thread = new Thread(new Runnable() { @Override public void run() { System.out.println("3 " + Thread.currentThread().getName()); // txt.setVisibility(View.VISIBLE); // 和上次的visible相同,则不发生异常 txt.setVisibility(View.GONE); // 和上次的visible不相同,则发生异常 } }); thread.start(); } });
相关文章推荐
- android 的view类的setVisibility();值的意思
- 设置setVisibility没效果
- android中setVisibility的用法
- Android开发 -- 控件的显示与隐藏 setVisibility View.VISIBLE View.INVISIBLE View.GONE
- OC中的UIButton/UIlable
- iOS边练边学--触摸事件以及能够拖拽的UIView的练习
- Fluent NHibernate and Mysql,SQLite,PostgreSQL
- IOS UIScrollView——简单示例
- SPOJ QTREE5 Query on a tree V(边分治)
- SPOJ QTREE4 Query on a tree IV(边分治)
- SPOJ PT07J Query on a tree III(dfs序,主席树)
- SPOJ QTREE2 Query on a tree II(lct)
- SPOJ QTREE Query on a tree (lct)
- webpack初学者指南(Beginner’s guide to Webpack)
- IOS UIScrollView——用法详解
- could not build module foundation 解决
- 在requirejs中使用qunit
- 微软 Build 2016
- SPOJ GSS5 Can you answer these queries V(区间合并)
- UIView的alpha、hidden和opaque属性之间的关系和区别