Androidは4種類のスレッドでUIインタフェースを操作する方法をまとめた

2368 ワード

バックグラウンドスレッドでは、ネットワークからデータを取得するなど、時間のかかる操作を行うことがよくあります.しかし、データが取り戻され、ページに表示される必要がある場合、androidのUIページは他のスレッドで直接操作できないことを知っているため、いくつかの小さなトラブルに遭遇します.以下では、スレッド内でUIインタフェースを操作するための4つの方法をまとめる.
方法一:Handler
サブスレッドはHandlerのsendMessageを呼び出してイベントを送信する.

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    ,
      }
 }

方法2:View.post(Runnable )

public void onClick( View v ) {
        new Thread( new Runnable() {
                public void run() {
                       //     
​    ​    ​    ​    ​    ​      loadNetWork();
​                          myText.( new Runnable() {
                                  myText.setText(        );
                          });
                 }
        }).start();
}

方法3: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.91dota.com" );

 private class LoadTask extends AsyncTask {
     protected String doInBackground( String... url ) {
          return loadDataFormNetwork( url[0] );//      
     }

     protected void onPostExecute( String result ) {
           myText.setText( result ); //              

    }
 }