您的位置:首页 > 产品设计 > UI/UE

Android 总结4种线程中操作UI界面的方法

2015-01-21 23:15 405 查看
我们经常会在后台线程中去做一些耗时的操作,比如去网络取数据。但是当数据取回来,需要显示到页面上的时候,会遇到一些小麻烦,因为我们都知道,android的UI页面是不允许在其他线程直接操作的。下面总结4中方法用来在线程中操作UI界面。

方法一:Handler

子线程调用Handler的sendMessage(message)发送事件。

Java代码

 




mHandler = new Handler() {   

   @Override  

   public void handleMessage(Message msg) {   

        //操作界面   

       myText.setText( 来自网络的信息);   

      super.handleMessage(msg);   

   }   

  };  

mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
//操作界面
myText.setText( 来自网络的信息);
super.handleMessage(msg);
}
};

 

Java代码

 




public class MyThread extends Thread {   

     public void run() {   

​    ​    ​    // 耗时操作   

​    ​    ​    ​loadNetWork();   

            Message msg = new Message();   

            mHandler.sendMessage(msg);//向Handler发送消息,   

      }   

 }  

public class MyThread extends Thread {
public void run() {
​    ​    ​    // 耗时操作
​    ​    ​    ​loadNetWork();
Message msg = new Message();
mHandler.sendMessage(msg);//向Handler发送消息,
}
}


方法二:View.post(Runnable)

Java代码

 




public void onClick( View v ) {   

        new Thread( new Runnable() {   

                public void run() {   

                       // 耗时操作   

​    ​    ​    ​    ​    ​      loadNetWork();   

​                          myText.( new Runnable() {   

                                  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类似

Java代码

 




public void onClick( View v ) {   

        new Thread( new Runnable() {   

                public void run() {   

                       // 耗时操作   

​    ​    ​    ​    ​    ​      loadNetWork();   

​                         Activity.runOnUiThread.( new Runnable() {   

                                  myText.setText( 来自网络的信息);   

                          });   

                 }   

        }).start();   

}  

public void onClick( View v ) {
new Thread( new Runnable() {
public void run() {
// 耗时操作
​    ​    ​    ​    ​    ​      loadNetWork();
​                         Activity.runOnUiThread.( new Runnable() {
myText.setText( 来自网络的信息);
});
}
}).start();
}


方法四:AsyncTask

Java代码

 




//UI线程中执行   

new DownloadImageTask().execute( "www.91dota.com" );  

//UI线程中执行
new DownloadImageTask().execute( "www.91dota.com" );

 

Java代码

 




private class LoadTask extends AsyncTask {   

    protected String doInBackground( String... url ) {   

         return loadDataFormNetwork( url[0] );//后台耗时操作   

    }   

  

    protected void onPostExecute( String result ) {   

          myText.setText( result ); //得到来自网络的信息刷新页面    

  

   }   

}  

 

from:/article/3819847.html

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: