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 件のコメント:
コメントを投稿