在Android中实现service动态更新UI界面
之前曾介绍过Android的UI设计与后台线程交互,据Android API的介绍,service一般是在后台运行的,没有界面的。那么如何实现service动态更新UI界面呢?
案例:通过service向远程服务器发送请求,根据服务器返回的结果动态更新主程序UI界面,主程序可实时关闭或重启服务。
注册BroadcastReceiver
在主程序activity中注册一个BroadcastReceiver,用于接收Service发布的广播。
@Override
protected void onStart()
{// 重写onStart方法
dataReceiver = new DataReceiver();
IntentFilter filter = new IntentFilter();// 创建IntentFilter对象
filter.addAction("com.szy.ui.service");
registerReceiver(dataReceiver, filter);// 注册Broadcast Receiver
super.onStart();
}
停止service命令
主程序activity可发布广播,用于向后台service传递数据或控制信息,如停止service命令。
btnStop.setOnClickListener(new OnClickListener()
{
//为按钮添加点击事件监听
@Override
public void onClick(View v)
{//重写onClick方法
Intent myIntent = new Intent();//创建Intent对象
myIntent.setAction("com.szy.ui.service");
myIntent.putExtra("cmd", CMD_STOP_SERVICE);
sendBroadcast(myIntent);//发送广播
}
});
接收广播
后台service注册BroadCastReceiver用于接受主程序发送的广播
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{// 重写onStartCommand方法
IntentFilter filter = new IntentFilter();// 创建IntentFilter对象
filter.addAction("com.szy.ui.service");
registerReceiver(cmdReceiver, filter);// 注册Broadcast Receiver
doJob();// 调用方法启动线程,自己来完成
return super.onStartCommand(intent, flags, startId);
}
实时发送
后台service在doJob()方法中连接服务器并向主程序实时发送广播。
/**
* 启动一个子纯种并连接服务器,接收服务器返回数据data。代码略。。。
*/
Object data;//服务器返回的数据data
Intent intent = new Intent();//创建Intent对象
intent.setAction("com.szy.ui.service");
intent.putExtra("data", data);
sendBroadcast(intent);//发送广播
至此,我们实现了主程序通过接收广播实时更新应用的UI界面。
在Android中实现service动态更新UI界面的更多相关文章
- android中实现service动态更新UI界面
案例:通过service向远程服务器发送请求,根据服务器返回的结果动态更新主程序UI界面,主程序可实时关闭或重启服务. 注册BroadcastReceiver 在主程序activity中注册一个Bro ...
- Android Handler传递参数动态更新UI界面demo
package com.example.demo_test; import android.app.Activity; import android.os.Bundle; import android ...
- Android中使用异步线程更新UI视图的几种方法
在Android中子线程是不能更新ui的. 所以我们要通过其他方式来动态改变ui视图, 1.runOnUiThreadactivity提供的一个轻量级更新ui的方法,在Fragment需要使用的时候要 ...
- Service 动态更新 UI
http://blog.csdn.net/u013724061/article/details/38642049 最终效果: 动态显示当前时间和电量 思路: 首先在Activity里用内部类定义两种广 ...
- Android异步处理系列文章四篇之二 使用AsyncTask异步更新UI界面
Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面Android异步处理二:使用AsyncTask异步更新UI界面Android异步处理三:Handler+Loope ...
- Android异步处理二:使用AsyncTask异步更新UI界面
在<Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面>中,我们使用Thread+Handler的方式实现了异步更新UI界面,这一篇中,我们介绍一种更为简 ...
- (转载)Android中的Service:Binder,Messenger,AIDL(2)
前言 前面一篇博文介绍了关于Service的一些基本知识,包括service是什么,怎么创建一个service,创建了一个service之后如何启动它等等.在这一篇博文里有一些需要前一篇铺垫的东西,建 ...
- Android 中的 Service 全面总结(转载)
转载地址:http://www.cnblogs.com/newcj/archive/2011/05/30/2061370.html 感谢作者 Android 中的 Service 全面总结 1.Ser ...
- Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面
Android应用的开发过程中需要把繁重的任务(IO,网络连接等)放到其他线程中异步执行,达到不阻塞UI的效果. 下面将由浅入深介绍Android进行异步处理的实现方法和系统底层的实现原理. 本文介绍 ...
随机推荐
- kvm虚拟机--存储池配置梳理(转)
1.创建基于文件夹的存储池(目录) 2.定义存储池与其目录 1 # virsh pool-define-as vmdisk --type dir --target /data/vmfs 3.创建已定义 ...
- OpenCv编程
(1)用OpenCv加载.显示.保存图片: //加载图片 IplImage* m_img;//定义IplImage格式的图片头指针: m_img=cvLoadImage(m_imgLoc);//装载m ...
- halcon算子
halcon的算子列表 Chapter 1 :Classification 1.1 Gaussian-Mixture-Models 1.add_sample_class_gmm 功能:把一个训练样 ...
- Online Judge中基本的输入输出
一.利用c语言处理输入和输出 1.输入: 在C语言中输入中stdin指针表示标准的输入,scanf默认读取的就是stdin指向的输入,在acm中我们可能需要不断的测试,最好将stdin重定向到某一个文 ...
- display:block 不起作用
jquery中$("#Main").css("display","none"); $("#Day").css('disp ...
- 基于资源的权限系统-API设计
概述 权限系统需要和别的系统集成,因此,良好的API是易用性的保证. 这里只设计一些权限相关的核心 API,关于用户,组织,导入导出之类的后续再逐步补充 API 设计 围绕权限有以下 4 类 API: ...
- 两个实用的工具推荐:ResxManager和ValueInjecter
一.ResxManager 1. 资源文件编辑工具ResxManager,这个工具可以在一个界面中编辑所有语言的内容. 2. 可以新增.删除key. 3. 注意:如果是新建的Resx,一定要有一 ...
- Jexus 5.8.2 Beta1发布:为Asp.Net Core进入生产环境提供平台支持
Jeuxs 5.8.2beta1于7月10日正式发布. 有如下更新: 1,为FastCGI提供KEEP_CONN支持,优化FastCGI工作线程池调度算法: 2,完善反向代理的负载均衡策略,支持“随机 ...
- Centos6.6下安装MariaDB步骤,利用yum进行安装
1.在/etc/yum.repos.d/下建立MariaDB.repo文件 可以在Win下编辑好此文件,然后通过SSH远程复制过去. 2.MariaDB.repo内容要根据MariaDB官方提供的re ...
- Http规范
1. 关于 HTTP Basic Authentication http://blog.itpub.net/23071790/viewspace-709367/ 通过以下代码,提示用户登录 Respo ...