Handler在主线程创建和在子线程创建的示例(18)
Handler在主线程创建和在子线程创建的示例(18)
flyqilong 发表于2年前
Handler在主线程创建和在子线程创建的示例(18)
  • 发表于 2年前
  • 阅读 118
  • 收藏 0
  • 点赞 1
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

摘要: 利用Handler来实现UI线程的更新的,Handler一般运行在主线程(UI)中,也可以在子线程中运用,但建议一般在主线中运用
//在主线程创建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();

		}

	}
}


  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 3
博文 93
码字总数 53900
×
flyqilong
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: