美文网首页Android
service内操作UI

service内操作UI

作者: 千万bt | 来源:发表于2018-04-23 19:57 被阅读0次

开发过程中需要在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();

 } 

相关文章

  • service内操作UI

    开发过程中需要在service中载入一个view,并且在任何页面内都可以向service发送请求去改变view的显...

  • 2018-07-06

    service和AIDL service执行与UI进程中,所以不要在service中执行耗时操作。 service...

  • Android service 的使用

    创建service基类 创建操作接口 定义具体service 调用,配合使用BroadcastReceiver更新UI

  • IntentService的使用及源码分析

    介绍 Service默认是运行在UI线程的不能执行耗时任务(10s内不会anr),所以我们如果想在Service中...

  • Service 服务

    自定义类 继承Service 内部类继承Binder,内写需要的方法(注意一般Service在UI线程,别左耗时操...

  • 【UI Text Writing】Microsoft UX Wr

    最近在Review一个新业务(Image Portability Service)操作界面的UI text,我对产...

  • 安卓service使用(一)

    如题,本文将简述,同一个进程内,service如何创建,绑定等操作。 首先,service是什么? 官方描述: A...

  • 【Python】PC端UI自动化:鼠标控制+定时调度器使用

    我们都知道要实现APP内的UI自动化常用的有很多自动化框架来实现鼠标拖拽、滑动、点击等操作。PC端的UI自动化操作...

  • Service

    Android的Service Service是在main Thread中执行,Service中不能执行耗时操作(...

  • 安卓开发入门教程-Service

    什么是Service Service又称服务,是一种可在后台执行长耗时操作的无操作界面组件.Service可以被像...

网友评论

    本文标题:service内操作UI

    本文链接:https://www.haomeiwen.com/subject/sgollftx.html