안 드 로 이 드 에서 UI 를 비동기 로 업데이트 하 는 네 가지 방식

성능 요구 로 인해 Android 는 UI 스 레 드 에서 만 UI 를 업데이트 해 야 한 다 는 것 을 잘 알 고 있 습 니 다.다른 스 레 드 에서 UI 를 업데이트 하려 면 저 는 대체적으로 4 가지 방식 을 정 리 했 습 니 다.보충 수정 을 환영 합 니 다.
  • Handler 메시지 전달 체 제 를 사용 합 니 다.
  • AsyncTask 비동기 작업 사용 하기;
  • runOnUiThread(action)방법 사용 하기;
  • Handler 의 post(Runnabel r)방법 사용 하기;
  • 다음은 각각 네 가지 방식 으로 TextView 를 업데이트 합 니 다.
    1.Handler 메시지 전달 메커니즘 사용
    
    package com.example.runonuithreadtest;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
     
     private TextView tv;
     
     Handler handler = new Handler()
     {
      public void handleMessage(android.os.Message msg) {
       if(msg.what==0x123)
       {
        tv.setText("    TextView");
       }
      };
     };
     
     @Override
     protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      tv = (TextView) findViewById(R.id.tv);
      new MyThread().start();
     }
     class MyThread extends Thread
     {
      @Override
      public void run() {
       //      
       try {
        Thread.sleep(2000);
       } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }
       handler.sendEmptyMessage(0x123);
      }
     }
    }
    
    
    2.AsyncTask 비동기 작업 사용
    주:UI 업데이트 작업 은 onPost Execute(String result)방법 에서 만 가능 합 니 다.
    
    package com.example.runonuithreadtest;
    
    import android.app.Activity;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
     
     private TextView tv;
     
     @Override
     protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      tv = (TextView) findViewById(R.id.tv);
      new Yibu().execute();
     }
     class Yibu extends AsyncTask<String, String, String>
     {
    
      @Override
      protected String doInBackground(String... params) {
       try {
        Thread.sleep(2000);
       } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }
       return null;
      }
      @Override
      protected void onPostExecute(String result) {
       // TODO Auto-generated method stub
       tv.setText("    TextView");
      }
      
     }
    }
    
    
    3.runOnUiThread(action)방법 사용 하기
    
    package com.example.runonuithreadtest;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
     
     private TextView tv;
     
     @Override
     protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      tv = (TextView) findViewById(R.id.tv);
      new MyThread().start();
     }
     class MyThread extends Thread
     {
      @Override
      public void run() {
       runOnUiThread(new Runnable() {
        
        @Override
        public void run() {
         // TODO Auto-generated method stub
          try {
           //      
           Thread.sleep(2000);
          } catch (InterruptedException e) {
           e.printStackTrace();
          }
          tv.setText("    TextView");
        }
       });
      }
     }
    }
    
    4.Handler 의 post(Runnabel r)방법 사용 하기
    
    package com.example.runonuithreadtest;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
     
     private TextView tv;
     
     @Override
     protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      tv = (TextView) findViewById(R.id.tv);
      Handler handler = new Handler();
      handler.post(new Runnable(){
       @Override
       public void run() {
        try {
         //      
         Thread.sleep(2000);
        } catch (InterruptedException e) {
         e.printStackTrace();
        }
        tv.setText("    TextView");
       }
    
    
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기