Android中跨线程修改UI界面的方式

//方式一:
	runOnUiThread(new Runnable() {
		@Override
		public void run() {
			TextView tv = findViewById(R.id.tv1);
			Date date = new Date();
			long time = date.getTime();
			tv.setText(String.valueOf(time));
		}
	});


//方式二:使用EventBus(使用前先导入依赖,注册EventBus事件,使用完成后要销毁EventBus事件)
	//获取数据的线程,将数据发送给主线程
	class Test extends Thread{
			@Override
			public void run() {
				super.run();
				MessageEvent c = new CEvent();
				c.setMgs("CCCCCCCCCCCCC");
				c.setMgsHex(Thread.currentThread().getName());
				EventBus.getDefault().post(c);
			}
	}
	//主线程中接收数据
	@Subscribe(threadMode = ThreadMode.MAIN,priority=1,sticky=true)
	public void handleMessageC(CEvent event) {
		String name = Thread.currentThread().getName();
		Log.i("EventBusTest", event.getMgsHex());
		TextView tv = findViewById(R.id.tv1);
		tv.setText(event.getMgs());
	}
	
	
//方式三:
	//线程中调用函数传出数据
	class Test extends Thread{
			@Override
			public void run() {
				super.run();
				sendMessage(msg);
			}
	}
	
	//传出数据
	private void sendMessage(String msg) {
        Message message=new Message();
        message.what=0;
        Bundle bundle=new Bundle();
        bundle.putString("content",msg);
        message.setData(bundle);

		handler.sendMessage(message);
        
    }
	//主线程中展示数据
	private Handler handler=new Handler(){
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case 0:
                    String mg = msg.getData().getString("content");
                    RingToast.show(mg);
					TextView tv = findViewById(R.id.tv1);
					tv.setText(mg);
                    break;
            }
        }
    };



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值