Android(安卓)总结4种线程中操作UI界面的方法
16lz
2021-01-25
我们经常会在后台线程中去做一些耗时的操作,比如去网络取数据。但是当数据取回来,需要显示到页面上的时候,会遇到一些小麻烦,因为我们都知道,android的UI页面是不允许在其他线程直接操作的。下面总结4中方法用来在线程中操作UI界面。
方法一:Handler
子线程调用Handler的sendMessage(message)发送事件。
- mHandler=newHandler(){
- @Override
- publicvoidhandleMessage(Messagemsg){
- //操作界面
- myText.setText(来自网络的信息);
- super.handleMessage(msg);
- }
- };
mHandler = new Handler() { @Override public void handleMessage(Message msg) { //操作界面 myText.setText( 来自网络的信息); super.handleMessage(msg); } };Java代码
- publicclassMyThreadextendsThread{
- publicvoidrun(){
- //耗时操作
- loadNetWork();
- Messagemsg=newMessage();
- mHandler.sendMessage(msg);//向Handler发送消息,
- }
- }
public class MyThread extends Thread { public void run() { // 耗时操作 loadNetWork(); Message msg = new Message(); mHandler.sendMessage(msg);//向Handler发送消息, } }
方法二:View.post(Runnable)
- publicvoidonClick(Viewv){
- newThread(newRunnable(){
- publicvoidrun(){
- //耗时操作
- loadNetWork();
- myText.(newRunnable(){
- myText.setText(来自网络的信息);
- });
- }
- }).start();
- }
public void onClick( View v ) { new Thread( new Runnable() { public void run() { // 耗时操作 loadNetWork(); myText.( new Runnable() { myText.setText( 来自网络的信息); }); } }).start();}
方法三:Activity.runOnUiThread(Runnable)
与view.post类似
- publicvoidonClick(Viewv){
- newThread(newRunnable(){
- publicvoidrun(){
- //耗时操作
- loadNetWork();
- Activity.runOnUiThread.(newRunnable(){
- myText.setText(来自网络的信息);
- });
- }
- }).start();
- }
public void onClick( View v ) { new Thread( new Runnable() { public void run() { // 耗时操作 loadNetWork(); Activity.runOnUiThread.( new Runnable() { myText.setText( 来自网络的信息); }); } }).start();}
方法四:AsyncTask
- //UI线程中执行
- newDownloadImageTask().execute("www.91dota.com");
//UI线程中执行 new DownloadImageTask().execute( "www.91dota.com" );Java代码
- privateclassLoadTaskextendsAsyncTask{
- protectedStringdoInBackground(String...url){
- returnloadDataFormNetwork(url[0]);//后台耗时操作
- }
- protectedvoidonPostExecute(Stringresult){
- myText.setText(result);//得到来自网络的信息刷新页面
- }
- }
from:http://iaiai.iteye.com/blog/1183681
更多相关文章
- Nginx系列教程(六)| 手把手教你搭建 LNMP 架构并部署天空网络电影
- Android之Socket通信
- Android(安卓)系统Handler用法简介
- Android拾萃 - RxJava5种响应类型的区别和背压(三)
- Android应用程序模型:应用程序,任务,进程,线程
- Android:RxJava 结合 Retrofit 优雅实现 网络请求轮询
- Android客户端与服务器之间的通信
- ANDROID GridView 分页平滑滑动 效果的实现(基于android TV遥控器
- Android(安卓)Looper用法及原理