Android UI更新的几种方法总结
程序员文章站
2024-03-01 18:45:04
android ui更新
做过android开发的人都遇到过这样的问题:随着需求的变化,某些入口界面会出现ui的增减、内容变化和跳转界面变化等问题,这里就说明...
android ui更新
做过android开发的人都遇到过这样的问题:随着需求的变化,某些入口界面会出现ui的增减、内容变化和跳转界面变化等问题,这里就说明几种方法来实现 ui的更新。
1、activity的 runonuithread
textview = (textview) findviewbyid( r.id.tv ); new thread(new runnable() { @override public void run() { runonuithread(new runnable() { @override public void run() { textview.settext( "更新ui了"); } }); } }).start();
android activity runonuithread() 方法使用
2、handler sendemptymessage()
package lib.com.myapplication; import android.os.handler; import android.os.message; import android.support.v7.app.appcompatactivity; import android.os.bundle; import android.widget.textview; public class mainactivity extends appcompatactivity { private textview textview ; handler handler = new handler( ) { @override public void handlemessage(message msg) { super.handlemessage(msg); textview.settext( "ui更新了"); } }; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); textview = (textview) findviewbyid( r.id.tv ); new thread(new runnable() { @override public void run() { try { thread.sleep( 2000 ); } catch (interruptedexception e) { e.printstacktrace(); } handler.sendemptymessage( 2 ) ; } }).start(); } }
3、handler post()
package lib.com.myapplication; import android.os.bundle; import android.os.handler; import android.support.v7.app.appcompatactivity; import android.widget.textview; public class mainactivity extends appcompatactivity { private textview textview ; handler handler = new handler(); @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); textview = (textview) findviewbyid( r.id.tv ); new thread(new runnable() { @override public void run() { try { thread.sleep( 2000 ); } catch (interruptedexception e) { e.printstacktrace(); } handler.post(new runnable() { @override public void run() { textview.settext( "ui更新了"); } }) ; } }).start(); } }
在子线程中切换到主线程
new thread(new runnable() { @override public void run() { logutil.d( "ttt 11111111111" + thread.currentthread().getname() ); new handler(looper.getmainlooper()).post(new runnable() { @override public void run() { logutil.d( "ttt 55555555" + thread.currentthread().getname() ); } }); logutil.d( "ttt 22222222222" + thread.currentthread().getname() ); logutil.d( "ttt 33333333333" + thread.currentthread().getname() ); logutil.d( "ttt 44444444444" + thread.currentthread().getname() ); } }).start();
结果
ttt 11111111111thread-155 ttt 22222222222thread-155 ttt 33333333333thread-155 ttt 44444444444thread-155 ttt 55555555main
可见这种方式可以快速切换线程,从log日志来看,切换到主线程不会阻塞子线程。
4、view post()
textview = (textview) findviewbyid( r.id.tv ); new thread(new runnable() { @override public void run() { try { thread.sleep( 2000 ); } catch (interruptedexception e) { e.printstacktrace(); } textview.post(new runnable() { @override public void run() { textview.settext( "ui更新了"); } }) ; } }).start();
总结:
1、其实上面的四种方式都可归结于一种方式:handler 用于android线程之间的通信。
2、为什么android要求只能在ui线程进行ui操作? 主要还是为了避免多线程造成的并发的问题。在单线程操作ui是安全的。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
上一篇: 校园导游咨询系统(数据结构课程设计)
下一篇: Python实现自动登录百度空间的方法