加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 教程 > 正文

Android 总结4种线程中操作UI界面的技巧

发布时间:2021-11-25 17:53:00 所属栏目:教程 来源:互联网
导读:我们经常会在后台线程中去做一些耗时的操作,比如去网络取数据。但是当数据取回来,需要显示到页面上的时候,会遇到一些小麻烦,因为我们都知道,Android的UI页面是不允许在其他线程直接操作的。下面总结4中方法用来在线程中操作UI界面。 方法一:Handler 子

我们经常会在后台线程中去做一些耗时的操作,比如去网络取数据。但是当数据取回来,需要显示到页面上的时候,会遇到一些小麻烦,因为我们都知道,Android的UI页面是不允许在其他线程直接操作的。下面总结4中方法用来在线程中操作UI界面。
 
方法一:Handler
 
子线程调用Handler的sendMessage(message)发送事件。
 
mHandler = new Handler() {  
   @Override  
   public void handleMessage(Message msg) {  
        //操作界面  
       myText.setText( 来自网络的信息);  
      super.handleMessage(msg);  
   }  
  };  
 
 
public class MyThread extends Thread {  
     public void run() {  
​    ​    ​    // 耗时操作  
​    ​    ​    ​loadNetWork();  
            Message msg = new Message();  
            mHandler.sendMessage(msg);//向Handler发送消息,  
      }  
 }  
方法二:View.post(Runnable )
 
public void onClick( View v ) {  
        new Thread( new Runnable() {  
                public void run() {  
                       // 耗时操作  
​    ​    ​    ​    ​    ​      loadNetWork();  
​                          myText.( new Runnable() {  
                                  myText.setText( 来自网络的信息);  
                          });  
                 }  
        }).start();  
}  
方法三:Activity.runOnUiThread(Runnable )
 
与view.post类似
 
public void onClick( View v ) {  
        new Thread( new Runnable() {  
                public void run() {  
                       // 耗时操作  
​    ​    ​    ​    ​    ​      loadNetWork();  
​                         Activity.runOnUiThread.( new Runnable() {  
                                  myText.setText( 来自网络的信息);  
                          });  
                 }  
        }).start();  
}  
方法四:AsyncTask
 
//UI线程中执行  
new DownloadImageTask().execute( "www.linuxidc.com" );  
 
 
private class LoadTask extends AsyncTask {  
    protected String doInBackground( String... url ) {  
         return loadDataFormNetwork( url[0] );//后台耗时操作  
    }  
  
    protected void onPostExecute( String result ) {  
          myText.setText( result ); //得到来自网络的信息刷新页面   
  
   }  

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读