案例:通过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. 移动端touch与click区别--移动端开发整理笔记(五)

    移动端用touch还是click? 在移动端开发中,click事件有300ms的延时,由来源于iphone处理双击缩放功能种下的坑.因为用手指在屏幕上快速点击两次,iOS 自带的 Safari 浏览器 ...

  2. 使用Git Flow进行版本控制

    重置 # force reset $ git flow init -f

  3. SDOI2010选做

    Round1 D1T1外星千足虫 \(BSOJ2793\)--高斯消元解异或方程组 简述 有\(n\)个数\(\{a_i\}\) 给出\(m\)个信息,每个信息给出\(\displaystyle{(\ ...

  4. [PHP] Layui + jquery 实现 实用的文章自定义标签

    先看实现效果: html 代码如下: <!doctype html> <html> <head> <meta charset="utf-8" ...

  5. 使用emplace操作

    C++ 11新标准中引入了三个新成员——emplace_front.emplace和emplace_back,这些操作构造而不是拷贝元素.这些操作分别对应push_front.insert和push_ ...

  6. BST | 1043 BST树与镜像BST树的判断

    较为简单.小于大于的都走一遍就可以AC了 #include <stdio.h> #include <memory.h> #include <math.h> #inc ...

  7. nodejs内存溢出 FATAL ERROR: CALL_AND_RETRY_0 Allocation failed – process out of memory

    spa项目整体迁移转为ssr后,改动之后部署一切还好,就是突然有一天访问人数太多,node进程很容易就挂了自动重启. 最后经过压力测试,考虑到是堆内存溢出的问题,就报错误:FATAL ERROR: C ...

  8. chentos7 编译安装keepalived 1.4.5

    准备工作: 下载源码包,官方网站 下载命令:wget https://www.keepalived.org/software/keepalived-1.4.5.tar.gz 解压tar包,命令: ta ...

  9. 浅谈[0,1]区间内的n个随机实数变量中增加偏序关系类题目的解法

    浅谈[0,1]区间内的n个随机实数变量中增加偏序关系类题目的解法 众所周知,把[0,1]区间内的n个随机.相互独立的实数变量\(x_i\)之间的大小关系写成一个排列\(\{p_i\}\),使得\(\f ...

  10. Log4j之HelloWorld

    在编写项目的时候,我们一般都会用到日志记录,方便出错查找原因.首先我们需要了解什么是Log4j 1.使用maven建立工程,在pom.xml中加入如下: <dependency> < ...