案例:通过service向远程服务器发送请求,根据服务器返回的结果动态更新主程序UI界面,主程序可实时关闭或重启服务。

注册BroadcastReceiver

在主程序activity中注册一个BroadcastReceiver,用于接收Service发布的广播。

  1. @Override
  2. protected void onStart() {//重写onStart方法
  3. dataReceiver = new DataReceiver();
  4. IntentFilter filter = new IntentFilter();//创建IntentFilter对象
  5. filter.addAction("com.justel.serviceBC");
  6. registerReceiver(dataReceiver, filter);//注册Broadcast Receiver
  7. super.onStart();
  8. }

停止service命令

主程序activity可发布广播,用于向后台service传递数据或控制信息,如停止service命令。

  1. btnStop.setOnClickListener(new OnClickListener() {//为按钮添加点击事件监听
  2. @Override
  3. public void onClick(View v) {//重写onClick方法
  4. Intent myIntent = new Intent();//创建Intent对象
  5. myIntent.setAction("com.justel.service");
  6. myIntent.putExtra("cmd", CMD_STOP_SERVICE);
  7. sendBroadcast(myIntent);//发送广播
  8. }
  9. });

接收广播

后台service注册BroadCastReceiver用于接受主程序发送的广播

  1. @Override
  2. public int onStartCommand(Intent intent, int flags, int startId) {//重写onStartCommand方法
  3. IntentFilter filter = new IntentFilter();//创建IntentFilter对象
  4. filter.addAction("com.justel.service");
  5. registerReceiver(cmdReceiver, filter);//注册Broadcast Receiver
  6. doJob();//调用方法启动线程,自己来完成
  7. return super.onStartCommand(intent, flags, startId);
  8. }

实时发送

后台service在doJob()方法中连接服务器并向主程序实时发送广播。

  1. /**
  2. * 启动一个子纯种并连接服务器,接收服务器返回数据data。代码略。。。
  3. */
  4. Object data;//服务器返回的数据data
  5. Intent intent = new Intent();//创建Intent对象
  6. intent.setAction("com.justel.service");
  7. intent.putExtra("data", data);
  8. sendBroadcast(intent);//发送广播

android中实现service动态更新UI界面的更多相关文章

  1. 在Android中实现service动态更新UI界面

    之前曾介绍过Android的UI设计与后台线程交互,据Android API的介绍,service一般是在后台运行的,没有界面的.那么如何实现service动态更新UI界面呢?案例:通过service ...

  2. Android Handler传递参数动态更新UI界面demo

    package com.example.demo_test; import android.app.Activity; import android.os.Bundle; import android ...

  3. Android中使用异步线程更新UI视图的几种方法

    在Android中子线程是不能更新ui的. 所以我们要通过其他方式来动态改变ui视图, 1.runOnUiThreadactivity提供的一个轻量级更新ui的方法,在Fragment需要使用的时候要 ...

  4. Service 动态更新 UI

    http://blog.csdn.net/u013724061/article/details/38642049 最终效果: 动态显示当前时间和电量 思路: 首先在Activity里用内部类定义两种广 ...

  5. Android异步处理系列文章四篇之二 使用AsyncTask异步更新UI界面

    Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面Android异步处理二:使用AsyncTask异步更新UI界面Android异步处理三:Handler+Loope ...

  6. Android异步处理二:使用AsyncTask异步更新UI界面

    在<Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面>中,我们使用Thread+Handler的方式实现了异步更新UI界面,这一篇中,我们介绍一种更为简 ...

  7. Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面

    Android应用的开发过程中需要把繁重的任务(IO,网络连接等)放到其他线程中异步执行,达到不阻塞UI的效果. 下面将由浅入深介绍Android进行异步处理的实现方法和系统底层的实现原理. 本文介绍 ...

  8. Android异步处理系列文章四篇之一使用Thread+Handler实现非UI线程更新UI界面

    目录: Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面Android异步处理二:使用AsyncTask异步更新UI界面Android异步处理三:Handler+L ...

  9. Android研究之动态创建UI界面具体解释

     Android的基本UI界面一般都是在xml文件里定义好,然后通过activity的setContentView来显示在界面上.这是Android UI的最简单的构建方式.事实上,为了实现更加复 ...

随机推荐

  1. mybatis学习4

    QL99中的连接查询 连接查询 交叉连接    select * from A,B; 内连接 隐式内连接   select * from A,B where 条件 显示内连接  select * fr ...

  2. wireshark-wincap安装问题

    winpcap关键模块 32位系统: C:\Windows\system32\wpcap.dll C:\Windows\system32\Packet.dll C:\Windows\system32\ ...

  3. spark基础知识一

    1. spark是什么 Apache Spark™ is a unified analytics engine for large-scale data processing. spark是针对于大规 ...

  4. uname 命令简介

    [root@localhost root]# uname --help Usage: uname [OPTION]... Print certain system information. With ...

  5. Ubuntu 修改apt-get源为阿里源

    原文件重命名备份 sudo mv /etc/apt/sources.list /etc/apt/source.list.bak 编辑源列表文件 sudo vim /etc/apt/sources.li ...

  6. jenkins更新为国内源

    系统管理->插件管理->高级->升级站点->URL https://jenkins-zh.gitee.io/update-center-mirror/tsinghua/upda ...

  7. svn在cleanup 时,提示privious operation has not finished,解决方案

    在updated代码时,svn 提示 上一次操作失败,需要cleanup. 执行cleanup时,提示:cleanup失败,因为上一次操作失败,请先执行cleanup.很幽默的提示. svn的“.sv ...

  8. c++ builder调用sql server的存储过程进行数据的下载和上传

    小小的几行代码,在这里搞了一天.好好的一个周六过的无比的难受.代码很简单,但是主要原因是因为在用合作商的软件上传数据的时候有些框框没有勾选. come on....... 1.用两个控件ADOConn ...

  9. 用ADB 抓取和存储APP日志方法

    前置条件:电脑已经安装好adb (一)  进入adb目录下连接手机,检测出手机 CD 到SDK的platform-tools (二)adb logcat-c  清除日志  (三)adb  logcat ...

  10. vue父子(父传子)传值

    vue2.0中,实现父子组件间的传值,需要依靠一个props的属性,作为变量接收的对象. 注:vue.js文件引用的是本地的js文件,拷贝本机运行时,可以使用cnd替换. https://www.bo ...