Handler在主線程建立和在子線程建立的示例(18)

//在主線程建立Handler,實現UI的更新,如下是一個例子
public class MainActivity extends Activity {
	private TextView text_show;

	// 在主線程中建立消息Handler
	// 主線程建立方式
	Handler handler = new Handler() {
		// 要重寫裏面的方法
		public void handleMessage(android.os.Message msg) {
			// 跟新UI,設置textview
			if (msg.what == 1) {
				text_show.setText((String) msg.obj);
			}
		};

	};// 注意這裏要分號

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		text_show = (TextView) this.findViewById(R.id.text_show);
	}

	public void sendMessage(View view) {
		// 耗時工做在子線程,而後向主線程傳遞數據
		new Thread(new Runnable() {

			@Override
			public void run() {
				// Message對象能夠經過new出來,但不建議,一般使用 Message.obtain() 或
				// Handler.obtainMessage() 方法來從消息池中得到空消息對象,以節省資源;
				Message message = Message.obtain();
				message.what = 1;
				message.obj = "這是子線程,請接收";
				// 封裝完數據發送給主線程
				handler.sendMessage(message);

			}
		}).start();
	}
}

//在子線程運用的例子
public class SecondActivity extends Activity {
	private TextView text_show;

	// 在子線程中建立消息Handler
	// 子線程建立方式
	private Handler handler;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		text_show = (TextView) this.findViewById(R.id.text_show);
		new Mythread().start();
	}

	public void sendMessage(View view) {

		Message message = Message.obtain();
		message.what = 1;
		message.obj = "這是主線程在發送,請接收";
		// 封裝完數據發送給子線程
		handler.sendMessage(message);

	}

	// Handler在子線程張處理消息
	class Mythread extends Thread {
		@Override
		public void run() {
			// 1.建立looper
			Looper.prepare();
			handler = new Handler() {
				// 要重寫裏面的方法
				@Override
				public void handleMessage(Message msg) {
					switch (msg.what) {
					case 1:
						Log.i("MainActivity", (String) msg.obj);
						break;

					}
				}

			};// 注意這裏要分號
				// 3.循環讀取MessageQueue
			Looper.loop();

		}

	}
}
相關文章
相關標籤/搜索