读书人

Handler多线程1

发布时间: 2012-07-15 20:11:37 作者: rapoo

Handler多线程一
例子:

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() {@Overridepublic void onClick(View v) {//立即把线程加入消息队列中handler.post(r);}});        b2.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//停止线程handler.removeCallbacks(r);}});      }      Handler handler = new Handler();/**     *该方法的内部类将在handler.sendMessage(msg)后执行         Handler handler = new Handler(){@Overridepublic void handleMessage(Message msg) {System.out.println("msg:"+msg.arg1);}    };    */      Runnable r = new Runnable() {@Overridepublic 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有两个消息队列,一个是post线程队列,另一个是message消息队列,两个队列的方法是异步的。handler匿名内部类方法是在handler.sendMessage(msg)后执行。
Thread.currentThread().getId()和Thread.currentThread().getName()是得到当前线程Id和Name的方法
Handler.post方法和Runnable是处于同一个线程(重要!!)

读书人网 >移动开发

热点推荐