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();

		}

	}
}
相关文章
相关标签/搜索