UI操作(textView.setText("hoge")など)が可能なのはメインスレッドのみ。
 UI操作する時はHandlerやMessageを使い、UI操作とは別に裏で処理を行いたい時はThreadやTimerを使う。 
 
 非同期処理
|    クラス  |     スレッド種別  |     用途  |     サンプル  |  
|    Handler  |     メインスレッド  |     UI操作  |     Handler handler=new Handler();  handler.postDelayed(new Runnable(){      public void run() {          android.util.Log.e("","UI操作可能");      }  },100);  |  
|    Message  |     メインスレッド  |     UI操作。  |     Handler handler=new Handler();  Message msg=Message.obtain(handler,new Runnable() {      public void run() {          android.util.Log.e("","UI操作可能");      }      });  msg.what=MESSAGE_ID;//メッセージID  msg.obj=object;     //任意のオブジェクト引数  msg.arg1=0;         //任意のint引数  msg.arg2=0;         //任意のint引数  handler.sendMessageDelayed(msg,100);  |  
|    handler.removeMessages(MESSAGE_ID);  |  |||
|    Thread  |     独自スレッド  |     UI操作不可。  |     Thread thread=new Thread(){      public void run() {          android.util.Log.e("","UI操作不可");      }  };  thread.start();  |  
|    Timer  |     独自スレッド  |     UI操作不可。  |     Timer timer=new Timer();  TimerTask  task=new TimerTask() {      public void run() {          android.util.Log.e("","UI操作不可");      }  };  timer.schedule(task,0,100);  |  
|    AsyncTask  |     メインスレッド+  |     メインスレッドと独自スレッドが共存  |     public class DownloadTask extends AsyncTask<T1, T2, T3> {       @Override       protected T3 doInBackground(T1...  args) {           android.util.Log.e("","UI操作不可");       }       @Override       protected void onPostExecute(T3 result) {           android.util.Log.e("","UI操作可能");       }  }  |  
|    new DownloadTask().execute(args);  |  
0 件のコメント:
コメントを投稿