在Android中实现Service动态更新UI界面(Service与主程序Activity之间的数据交互或控制)

简介:

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

方案一:使用广播+Service

注册BroadcastReceiver

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

    @Override 
    protected void onStart() {//重写onStart方法  
        dataReceiver = new DataReceiver();  
        IntentFilter filter = new IntentFilter();//创建IntentFilter对象  
        filter.addAction("com.xiaoshan.app");  
        registerReceiver(dataReceiver, filter);//注册Broadcast Receiver  
        super.onStart();  
    } 


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

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) {//重写onStartCommand方法          
        cmdReceiver = new CmdReceiver();
        IntentFilter filter = new IntentFilter();//创建IntentFilter对象  
        filter.addAction("com.xiaoshan.service");
        registerReceiver(cmdReceiver, filter);//注册Broadcast Receiver  
        return super.onStartCommand(intent, flags, startId);  
    } 
 

 

发送广播

1、主程序发布广播,Service接收读取数据。

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

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

2、Service发布广播,主程序Activity接收更新UI。

如:Service后台读取网络数据,用于向Activity传递数据或控制界面信息,更新UI。

//连接服务器读取数据(略)
Object data;//服务器返回的数据data
Intent intent = new Intent();//创建Intent对象  
intent.setAction("com.xiaoshan.app");  
intent.putExtra("data", data);  
sendBroadcast(intent);//发送广播 


如上实现双向广播注册和接收来实现Service和主程序Activity之间的数据交互或控制。

方案二:使用Handler

1、在主程序的Activity中声明一个static变量handler,里面写好回调函数

	TextView tv = ……;//这里省略

        public static Handler handler = new Handler(new Callback() {

		@Override
		public boolean handleMessage(Message msg) {
			tv.setText(msg.getData().getString("content"));
			return false;
		}
	});
2、在Service里面,调用这个handler,传输数据。

		Message msg = MyActivity.handler.obtainMessage();
		Bundle data = new Bundle();
		data.putString("content",content);
		msg.setData(data);
		msg.sendToTarget();






目录
相关文章
|
机器学习/深度学习 算法 定位技术
Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现裂缝的检测识别(C#代码UI界面版)
本项目基于YOLOv8模型与C#界面,结合Baumer工业相机,实现裂缝的高效检测识别。支持图像、视频及摄像头输入,具备高精度与实时性,适用于桥梁、路面、隧道等多种工业场景。
1461 27
|
Android开发 数据安全/隐私保护 开发者
Android自定义view之模仿登录界面文本输入框(华为云APP)
本文介绍了一款自定义输入框的实现,包含静态效果、hint值浮动动画及功能扩展。通过组合多个控件完成界面布局,使用TranslateAnimation与AlphaAnimation实现hint文字上下浮动效果,支持密码加密解密显示、去除键盘回车空格输入、光标定位等功能。代码基于Android平台,提供完整源码与attrs配置,方便复用与定制。希望对开发者有所帮助。
344 0
|
XML Java Android开发
Android自定义view之网易云推荐歌单界面
本文详细介绍了如何通过自定义View实现网易云音乐推荐歌单界面的效果。首先,作者自定义了一个圆角图片控件`MellowImageView`,用于绘制圆角矩形图片。接着,通过将布局放入`HorizontalScrollView`中,实现了左右滑动功能,并使用`ViewFlipper`添加图片切换动画效果。文章提供了完整的代码示例,包括XML布局、动画文件和Java代码,最终展示了实现效果。此教程适合想了解自定义View和动画效果的开发者。
591 65
Android自定义view之网易云推荐歌单界面
|
计算机视觉 Python
基于Dlib的人脸识别客户端(UI界面)
基于Dlib的人脸识别客户端(UI界面)
695 2
|
Android开发 开发者
Android企业级实战-界面篇-3
本文是《Android企业级实战-界面篇》系列的第三篇,主要介绍分割线和条形跳转框的实现方法,二者常用于设置和个人中心界面。文章通过具体代码示例展示了如何实现这两种UI组件,并提供了效果图。实现前需准备`dimens.xml`、`ids.xml`、`colors.xml`等文件,部分资源可参考系列第一、二篇文章。代码中详细说明了布局文件的配置,如分割线的样式定义和条形跳转框的组件组合,帮助开发者快速上手并应用于实际项目中。
202 1
|
XML Android开发 数据格式
Android企业级实战-界面篇-2
本文为《Android企业级实战-界面篇》系列第二篇,主要介绍三个UI模块的实现:用户资料模块、关注与粉丝统计模块以及喜欢和收藏功能模块。通过详细的XML代码展示布局设计,包括dimens、ids、colors配置文件的使用,帮助开发者快速构建美观且功能齐全的界面。文章结合实际效果图,便于理解和应用。建议配合第一篇文章内容学习,以获取完整工具类支持。
233 0
|
算法 Java Android开发
Android企业级实战-界面篇-1
本文详细介绍了Android企业级开发中界面实现的过程,涵盖效果展示、实现前准备及代码实现。作者通过自身经历分享了Android开发经验,并提供了`dimens.xml`、`ids.xml`、`colors.xml`和`strings.xml`等配置文件内容,帮助开发者快速构建规范化的UI布局。文章以一个具体的用户消息界面为例,展示了如何使用线性布局(LinearLayout)和相对布局(RelativeLayout)实现功能模块排列,并附带注意事项及使用方法,适合初学者和进阶开发者参考学习。
345 0
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
16919 5
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
存储 JSON JavaScript
WEB CAD插件通过上下文对象MxPluginContext修改UI界面的方法
本文介绍了如何使用MxPluginContext动态控制MxCAD项目的UI界面。通过该上下文对象,开发者可以灵活设置UI配置,如控制操作栏显隐、编辑按钮、添加侧边栏等。具体方法包括调用`getUiConfig()`获取并修改`mxUiConfig.json`中的属性,实现界面的定制化。此外,还提供了控制命令行聚焦的功能,解决输入框焦点锁定问题。详细代码示例和效果对比图展示了具体实现步骤,帮助开发者更好地适配项目需求。
|
开发框架 JavaScript 前端开发
HarmonyOS UI开发:掌握ArkUI(包括Java UI和JS UI)进行界面开发
【10月更文挑战第22天】随着科技发展,操作系统呈现多元化趋势。华为推出的HarmonyOS以其全场景、多设备特性备受关注。本文介绍HarmonyOS的UI开发框架ArkUI,探讨Java UI和JS UI两种开发方式。Java UI适合复杂界面开发,性能较高;JS UI适合快速开发简单界面,跨平台性好。掌握ArkUI可高效打造符合用户需求的界面。
838 8

热门文章

最新文章