標籤:
和大家一起探討Android線程已經有些日子了,談的最多的就是如何把子線程中的資料發送給主線程進行處理,進行UI介面的更新,為什麼要這樣,請查閱之前的隨筆。本篇我們就來討論一下關於主線程向子線程如何發送資料,這個用的地方也是非常的多,例如當我們為了最佳化使用者體驗,我們會在不影響使用者使用的情況下進行後台資料更新,好了廢話不多說,開始我們今天的討論。
public class ThreadActivity extends Activity implements OnClickListener{ private Button button1; private Button button2; //主線程中的Handler private Handler firstHandler = new Handler(){ public void handleMessage(android.os.Message msg) { System.out.println("first:"+Thread.currentThread()); Message message = new Message(); SecondHandler.sendMessageDelayed(message, 1000);//每隔1S向子線程發送一個Message對象 }; }; //子線程中的Handler private Handler SecondHandler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.four); init(); into(); } private void into() { HandlerThread handlerThread = new HandlerThread("handler Thread"); handlerThread.start(); SecondHandler = new Handler(handlerThread.getLooper()){ @Override public void handleMessage(Message msg) { System.out.println("Second:"+Thread.currentThread()); Message message = new Message(); firstHandler.sendMessageDelayed(message, 1000);//每隔1S向主線程發送一個Message對象 } }; } private void init() { button1 = (Button) findViewById(R.id.button1); button2 = (Button) findViewById(R.id.button2); button1.setOnClickListener(this); button2.setOnClickListener(this); } @Override public void onClick(View arg0) { switch (arg0.getId()) { case R.id.button1: firstHandler.sendEmptyMessage(1); break; case R.id.button2: firstHandler.removeMessages(1); break; default: break; } }}
布局檔案:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="send" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="stop" /></LinearLayout>
Android線程之主線程向子線程發送訊息