利用广播来更新UI 也可以在服务中使用广播来更新UI

在Android开发的时候必然少不了UI的更新,来保证用户的体验和交互。如果在主界面就很好更新,可是有时候总会遇到后台服务和ui交互 要求UI进行更新。
最好的办法就是可以使用广播来更新,也可以使用bindservice的返回IBinder来实现。

要用广播更新UI肯定要自己定义一个广博类继承于BroadcastReceiver
由于要更新UI所以定义为Activity内部类方便操作
但是广播只能用动态注册了

例如我自己写的音乐播放

我在MainActivity中定义了一个广播类

 public class MusicReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {

                int pc = intent.getIntExtra("process",-1);
                if (pc!=-1){
                    process = pc;
                    return;
                }

                int position = intent.getIntExtra("position",-1);
                if (position!=-1){
                    itemPosition = position;
                    adapter.setFocusPos(itemPosition);
                    binding.musicName.setText(musiclist.get(itemPosition).getMusicName());
                    updateTime(process,musiclist.get(itemPosition).getMusicDuration());
//                    updateTime(0,musiclist.get(itemPosition).getMusicDuration());
                    return;
                }
                isPlaying = intent.getBooleanExtra("isPlay",false);
                if (isPlaying){
                    binding.btnPlay.setImageResource(R.drawable.pause);
                }else {
                    binding.btnPlay.setImageResource(R.drawable.play);
                }


        }
    }

然后在

oncreate方法中动态注册

    private void registerBroadcast(){ //动态注册
        recevicer = new MusicReceiver();
        IntentFilter filter=new IntentFilter("com.Music_Control");//Intent的action
        registerReceiver(recevicer,filter);
    }

然后只需要在你想要更新UI的地方发送广播就可以了

例如

 Intent intent=new Intent();
        intent.setAction("com.Music_Control");//和代码注册时的IntentFilter filter=new IntentFilter("com.change_the_UI");对应
        intent.putExtra("position", musicManager.getCurrentindex());
        //intent.putExtra("process",musicManager.getCurrentPosition());
        sendBroadcast(intent);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值