/** * handle主要用於線程之間的通信,傳遞消息,數據等;ui線程底層封裝了looper,可以直接new handle,在子線程中使用handle, 要先調用looper.prepare(),實例完handle,要調用looper.loop(),looper用來不停的循環傳遞消息,messageque攜帶message, handle 收發消息,looper相當於傳送帶,messageque相當於貨箱,handle相當於工人。 在主線程中 使用 handler,子線程像主線程發送消息 public class MainActivity extends Activity { private Button btn1 ; private Handler handler = new Handler(){ //從寫handleMessage方法 處理 工作線程發送過來的消息 public void handleMessage(Message msg) { int str1 = msg.arg1; int str2 = msg.arg2; String str3 = (String)msg.obj; int str4 = msg.what; Bundle bundle = msg.getData(); Log.i("==Tag==", "=Str1="+str1+"=str2="+str2+"=str3="+str3+"=str4="+str4+"==bundle="+bundle.getString("str")); }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn1 = (Button)findViewById(R.id.btn1); btn1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub new Thread(){ @Override public void run() { // TODO Auto-generated method stub super.run(); //Message msg = new Message();//不能new 消耗內存 Message msg = Message.obtain(); msg.arg1 = 100; msg.arg2 = 200;//傳遞int 類型數據 msg.obj = "sssss";//傳遞對象類型 msg.what = 1;//標誌當前信息 //傳遞一個數據量較大的數據 Bundle bundle = new Bundle(); bundle.putString("str", "bundle值"); msg.setData(bundle); handler.sendMessage(msg);//發送消息 } }.start(); } }); } } 在子線程中使用handler,主線程向子線程發送消息,子線程要準備一個looper public class MainActivity extends Activity { private Handler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } //開啓子線程 public void start(View v){ new MyThread().start(); } //主線程向子線程發送數據 public void send(View v){ Message msg = Message.obtain(); msg.what = 100; msg.obj = "asdfghjkl"; handler.sendMessage(msg); } //自定義工作線程 public class MyThread extends Thread{ @Override public void run() { // TODO Auto-generated method stub super.run(); Looper.prepare();//創建looper對象 //接受主線程 發送來的數據 handler = new Handler(){ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); int str = msg.what; String str1 =(String)msg.obj; Log.i("==TAG==", "==str=="+str+"==str1=="+str1); } }; Looper.loop();//使用loop而裏的循環 取出數據 } } } */
Handle發送消息機制
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.