在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();






目录
相关文章
|
11天前
|
XML Android开发 UED
💥Android UI设计新风尚!掌握Material Design精髓,让你的界面颜值爆表!🎨
随着移动应用市场的蓬勃发展,用户对界面设计的要求日益提高。为此,掌握由Google推出的Material Design设计语言成为提升应用颜值和用户体验的关键。本文将带你深入了解Material Design的核心原则,如真实感、统一性和创新性,并通过丰富的组件库及示例代码,助你轻松打造美观且一致的应用界面。无论是色彩搭配还是动画效果,Material Design都能为你的Android应用增添无限魅力。
27 1
|
2月前
|
编解码 前端开发 vr&ar
从零开始的PICO教程(4)--- UI界面绘制与响应事件
这篇文章是PICO开发系列教程的第四部分,主要介绍了如何在PICO 4 VR环境中创建UI界面,包括Canvas和Panel的配置、UI元素的绘制、以及Button和Slider的事件响应绑定,并通过示例展示了数字增减和滑块功能的具体实现。
从零开始的PICO教程(4)--- UI界面绘制与响应事件
|
2月前
|
存储 搜索推荐 Java
探索安卓开发中的自定义视图:打造个性化UI组件Java中的异常处理:从基础到高级
【8月更文挑战第29天】在安卓应用的海洋中,一个独特的用户界面(UI)能让应用脱颖而出。自定义视图是实现这一目标的强大工具。本文将通过一个简单的自定义计数器视图示例,展示如何从零开始创建一个具有独特风格和功能的安卓UI组件,并讨论在此过程中涉及的设计原则、性能优化和兼容性问题。准备好让你的应用与众不同了吗?让我们开始吧!
|
2月前
|
编解码 Android开发
【Android Studio】使用UI工具绘制,ConstraintLayout 限制性布局,快速上手
本文介绍了Android Studio中使用ConstraintLayout布局的方法,通过创建布局文件、设置控件约束等步骤,快速上手UI设计,并提供了一个TV Launcher界面布局的绘制示例。
37 1
|
2月前
|
API Android开发
Android项目架构设计问题之选择和使用合适的UI库如何解决
Android项目架构设计问题之选择和使用合适的UI库如何解决
40 0
|
2月前
|
容器 iOS开发 Linux
震惊!Uno Platform 响应式 UI 构建秘籍大公开!从布局容器到自适应设计,带你轻松打造跨平台完美界面
【8月更文挑战第31天】Uno Platform 是一款强大的跨平台应用开发框架,支持 Web、桌面(Windows、macOS、Linux)及移动(iOS、Android)等平台,仅需单一代码库。本文分享了四个构建响应式用户界面的最佳实践:利用布局容器(如 Grid)适配不同屏幕尺寸;采用自适应布局调整 UI;使用媒体查询定制样式;遵循响应式设计原则确保 UI 元素自适应调整。通过这些方法,开发者可以为用户提供一致且优秀的多设备体验。
45 0
|
2月前
|
JSON Android开发 数据格式
Android项目架构设计问题之实现交互响应的结构化处理如何解决
Android项目架构设计问题之实现交互响应的结构化处理如何解决
14 0
|
6天前
|
IDE Android开发 iOS开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
【9月更文挑战第27天】在移动应用开发的世界中,Android和iOS是两个主要的操作系统平台。每个系统都有其独特的开发环境、工具和用户群体。本文将深入探讨这两个平台的关键差异点,并分析这些差异如何影响应用的性能、用户体验和最终的市场表现。通过对比分析,我们将揭示选择正确的开发平台对于确保项目成功的重要作用。
|
18天前
|
Android开发 开发者 Kotlin
探索安卓开发中的新特性
【9月更文挑战第14天】本文将引导你深入理解安卓开发领域的一些最新特性,并为你提供实用的代码示例。无论你是初学者还是经验丰富的开发者,这篇文章都会给你带来新的启示和灵感。让我们一起探索吧!
|
2天前
|
开发框架 移动开发 Android开发
安卓与iOS开发中的跨平台解决方案:Flutter入门
【9月更文挑战第30天】在移动应用开发的广阔舞台上,安卓和iOS两大操作系统各自占据半壁江山。开发者们常常面临着选择:是专注于单一平台深耕细作,还是寻找一种能够横跨两大系统的开发方案?Flutter,作为一种新兴的跨平台UI工具包,正以其现代、响应式的特点赢得开发者的青睐。本文将带你一探究竟,从Flutter的基础概念到实战应用,深入浅出地介绍这一技术的魅力所在。
18 7

热门文章

最新文章

下一篇
无影云桌面