service内操作UI

开发过程中需要在service中载入一个view,并且在任何页面内都可以向service发送请求去改变view的显示,由于无法在非主线程中进行UI操作,并且view相关数据在service内,所以必须通过别的方法去操作UI。

广播


service内部自定义一个广播继承BroadcastReceiver

class FloatWindowBroadcastReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            //IntentFilter标识
            if (ACTION_FLOAT.equals(action)){
                //传递数据
                String command = intent.getStringExtra("command");
                int position = intent.getIntExtra("position",0);
                switch (command){
                    case test:
                         break;
                    default:
                        ToastUtil.showMessage("参数错误");
                        break;
                }

            }
        }
    }

初始化,添加标识,注册广播。

private FloatWindowBroadcastReceiver floatWindowBroadcastReceiver;
@Override
    public void onCreate() {
        super.onCreate();
       //初始化
        floatWindowBroadcastReceiver = new FloatWindowBroadcastReceiver();
       //标识
        IntentFilter filter = new IntentFilter(ACTION_FLOAT);
       //注册广播
        registerReceiver(floatWindowBroadcastReceiver,filter);       
    }

在service销毁时取消注册广播

@Override
    public void onDestroy() {
        if (floatWindowBroadcastReceiver != null){
            unregisterReceiver(floatWindowBroadcastReceiver);
            floatWindowBroadcastReceiver = null;
        }
        super.onDestroy();
    }

在其他页面内调用该方法操作

Intent intent=new Intent(FloatWindowService.ACTION_FLOAT);
intent.putExtra("command","add");
sendBroadcast(intent);

Handler


service内创建一个Handler用于接收消息

private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what){

            }
        }
 };

发送消息,是否需要启用线程根据需求进行操作.

 public void send(){
     new Thread(new Runnable() {
          @Override
          public void run() {
          Message message=new Message();
          Bundle bundle=new Bundle();
          message.setData(bundle);
          handler.sendMessageDelayed(message,2000);
    }).start();

 } 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值