Android之Handler有感(三)

來源:互聯網
上載者:User

主線程給主線程發送訊息:

public class mainSendToMain extends Activity {     private Button btnTest;     private TextView textView;     private Handler handler;     @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.main);         btnTest = (Button)this.findViewById(R.id.btn_01);         textView = (TextView)this.findViewById(R.id.view_01);         btnTest.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View arg0) {                 Looper looper = Looper.getMainLooper();      //getMainLooper()方法是返回主線程的Looper對象                 //這裡以主線程的Looper對象建立了handler,                 //所以,這個handler發送的Message會被傳遞給主線程的MessageQueue。                 handler = new MyHandler(looper);                 //構建Message對象                 //第一個參數:是自己指定的message代號,方便在handler選擇性地接收                 //第二三個參數是傳遞的整型值,對記憶體消耗較少                 //第四個參數需要封裝的對象                 Message msg = handler.obtainMessage(1,2,3,"主線程發訊息了");                 handler.sendMessage(msg); //發送訊息             }         });     }     class MyHandler extends Handler{         public MyHandler(Looper looper){             super(looper);         }         public void handleMessage(Message msg){             textView.setText("我是主線程的Handler,收到了訊息:"+msg.obj);         }     } 

其他線程給自己發送訊息:

 

 public class otherSendToIts extends Activity{

  private Button btnTest;     private TextView textView;     private Handler handler;     @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.main);         btnTest = (Button)this.findViewById(R.id.btn_01);         textView = (TextView)this.findViewById(R.id.view_01);                 btnTest.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View arg0) {                 //啟動線程                 new MyThread().start();                 }         });     }     class MyHandler extends Handler{         public MyHandler(Looper looper){             super(looper);         }         public void handleMessage(Message msg){             super.handleMessage(msg);             textView.setText((String)msg.obj);         }     }         class MyThread extends Thread{         public void run(){             Looper.prepare();       //建立該線程的Looper對象             handler = new ThreadHandler(Looper.myLooper()); //這裡Looper.myLooper()獲得的就是該線程的Looper對象了            Message msg = handler.obtainMessage(1,1,1,"我自己");             handler.sendMessage(msg);             Looper.loop();          }         //定義線程類中的訊息處理類         class ThreadHandler extends Handler{             public ThreadHandler(Looper looper){                 super(looper);             }             public void handleMessage(Message msg){                 //這裡對該線程中的MessageQueue中的Message進行處理                 //這裡我們再返回給主線程一個訊息                 //加入判斷看看是不是該線程自己發的資訊                 if(msg.what == 1 && msg.obj.equals("我自己")){                     handler = new MyHandler(Looper.getMainLooper());                     Message msg2 = handler.obtainMessage(1,1,1,"稟告主線程:我收到了自己發給自己的Message");                     handler.sendMessage(msg2);                                 }             }         }     } } 

 

 其他線程給主線程發送訊息:

 public class otherSendToMain extends Activity{

private Button btn;private TextView textView;private Handler handler;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.main);btn = (Button) findViewById(R.id.btn_01);textView = (TextView) findViewById(R.id.view_01);btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubnew MyThread().start();}});}class MyHandler extends Handler{public MyHandler(Looper looper){super(looper);}@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);textView.setText("我是主線程的Handler,收到了訊息:"+(String)msg.obj);}}class MyThread extends Thread{public void run(){Looper looper = Looper.getMainLooper();handler = new MyHandler(looper);Message message = handler.obtainMessage(1,2,3,"其他線程發訊息了");handler.sendMessage(message);}}}

 

 主線程給其他線程發送訊息:

public class mainSendToOther extends Activity { Button button3; TextView textView; Looper mainLooper;  // 其它線程 OtherHandler otherHandler; @Override public void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.main);   button3 = (Button) findViewById(R.id.btn_01);  textView = (TextView) findViewById(R.id.view_01);  button3.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stub Message msg =otherHandler.obtainMessage(1,"這是主線程發送的訊息");   otherHandler.sendMessage(msg);}});    MyThread thread = new MyThread();  thread.start();  } class MyThread extends Thread {  @Override  public void run() {   // TODO Auto-generated method stub   super.run();   //建立該線程的Looper對象,用於接收訊息   Looper.prepare();   //線程的looper建立的handler表示訊息接收者是子線程   otherHandler = new OtherHandler(Looper.myLooper());   //迴圈從MessageQueue中取訊息。    Looper.loop();  } }   class OtherHandler extends Handler {  public OtherHandler() {   // TODO Auto-generated constructor stub  }  public OtherHandler(Looper looper) {   // TODO Auto-generated constructor stub   super(looper);    }    @Override  public void handleMessage(Message msg) {   // TODO Auto-generated method stub   super.handleMessage(msg);   mainHandler = new MainHandler(Looper.getMainLooper());   Message message = new Message();   message.obj="子線程收到訊息";   mainHandler.sendMessage(message);   } }  MainHandler mainHandler; class MainHandler extends Handler {  public MainHandler() {   // TODO Auto-generated constructor stub  }    public MainHandler(Looper looper) {   // TODO Auto-generated constructor stub   super(looper);  }    @Override  public void handleMessage(Message msg) {   // TODO Auto-generated method stub   super.handleMessage(msg);   textView.setText("我是主線程,這是收到的訊息:"+msg.obj);  } }}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.