Handlerマルチスレッド1

1790 ワード

例:
public class HandlerActivity extends Activity {
      /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button b1 = (Button)findViewById(R.id.button1);
        Button b2 = (Button)findViewById(R.id.button2);
        b1.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// 
				handler.post(r);
			}
		});
        b2.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// 
				handler.removeCallbacks(r);
			}
		});
      }
      Handler handler = new Handler();
/**
     * handler.sendMessage(msg) 
         Handler handler = new Handler(){
		@Override
		public void handleMessage(Message msg) {
			System.out.println("msg:"+msg.arg1);
		}
    	};
    */
      Runnable r = new Runnable() {
		@Override
		public void run() {
			System.out.println("sysout Thread");
			// ,Message Android 
			Message msg = handler.obtainMessage();
			// msg arg1 122, arg1 arg2 
			// 
			msg.arg1 = 122;
			// 
			handler.sendMessage(msg);
			//3000 
			handler.postDelayed(r, 3000);
		}
	  };
}

PS:Handlerには2つのメッセージキューがあります.1つはpostスレッドキューで、もう1つはmessageメッセージキューで、2つのキューの方法は非同期です.handler匿名内部クラスメソッドはhandler.sendMessage(msg)後に実行します.Thread.currentThread().getId()とThread.currentThread().getName()は現在のスレッドIdとNameを得る方法Handlerである.postメソッドとRunnableは同じスレッドにあります(重要!!)