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






目录
相关文章
|
4月前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
5月前
|
Java Linux Android开发
移动应用开发与操作系统的交互:深入理解Android和iOS
在数字时代,移动应用成为我们日常生活的一部分。本文将深入探讨移动应用开发的核心概念、移动操作系统的工作原理以及它们如何相互作用。我们将通过实际代码示例,展示如何在Android和iOS平台上创建一个简单的“Hello World”应用,并解释其背后的技术原理。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和知识。
|
8月前
|
前端开发
Element UI 【实战】纯前端对表格数据进行增删改查(内含弹窗表单、数据校验、时间日期格式)
Element UI 【实战】纯前端对表格数据进行增删改查(内含弹窗表单、数据校验、时间日期格式)
294 6
|
3月前
|
XML 搜索推荐 前端开发
安卓开发中的自定义视图:打造个性化UI组件
在安卓应用开发中,自定义视图是一种强大的工具,它允许开发者创造独一无二的用户界面元素,从而提升应用的外观和用户体验。本文将通过一个简单的自定义视图示例,引导你了解如何在安卓项目中实现自定义组件,并探讨其背后的技术原理。我们将从基础的View类讲起,逐步深入到绘图、事件处理以及性能优化等方面。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。
|
4月前
|
XML 前端开发 Android开发
Android:UI:Drawable:View/ImageView与Drawable
通过本文的介绍,我们详细探讨了Android中Drawable、View和ImageView的使用方法及其相互关系。Drawable作为图像和图形的抽象表示,提供了丰富的子类和自定义能力,使得开发者能够灵活地实现各种UI效果。View和ImageView则通过使用Drawable实现了各种图像和图形的显示需求。希望本文能为您在Android开发中使用Drawable提供有价值的参考和指导。
76 2
|
6月前
|
XML Android开发 UED
💥Android UI设计新风尚!掌握Material Design精髓,让你的界面颜值爆表!🎨
随着移动应用市场的蓬勃发展,用户对界面设计的要求日益提高。为此,掌握由Google推出的Material Design设计语言成为提升应用颜值和用户体验的关键。本文将带你深入了解Material Design的核心原则,如真实感、统一性和创新性,并通过丰富的组件库及示例代码,助你轻松打造美观且一致的应用界面。无论是色彩搭配还是动画效果,Material Design都能为你的Android应用增添无限魅力。
142 1
|
7月前
|
存储 搜索推荐 Java
探索安卓开发中的自定义视图:打造个性化UI组件Java中的异常处理:从基础到高级
【8月更文挑战第29天】在安卓应用的海洋中,一个独特的用户界面(UI)能让应用脱颖而出。自定义视图是实现这一目标的强大工具。本文将通过一个简单的自定义计数器视图示例,展示如何从零开始创建一个具有独特风格和功能的安卓UI组件,并讨论在此过程中涉及的设计原则、性能优化和兼容性问题。准备好让你的应用与众不同了吗?让我们开始吧!
|
7月前
|
编解码 Android开发
【Android Studio】使用UI工具绘制,ConstraintLayout 限制性布局,快速上手
本文介绍了Android Studio中使用ConstraintLayout布局的方法,通过创建布局文件、设置控件约束等步骤,快速上手UI设计,并提供了一个TV Launcher界面布局的绘制示例。
151 1
|
7月前
|
前端开发 JavaScript UED
element-ui 表格数据究竟隐藏着怎样的神秘样式与格式化技巧?快来揭开谜底!
【8月更文挑战第22天】《element-ui 表格数据样式及格式化案例》展示了如何利用 element-ui 的表格组件实现美观且易读的数据展示。通过简单配置,可以自定义表格样式,如边框、背景色等,并通过 formatter 实现数据格式化,例如将成绩保留一位小数。此外,还能依据条件设置行样式,如成绩达优则高亮显示,从而增强用户体验和数据可读性。
112 1
|
7月前
|
API Android开发
Android项目架构设计问题之选择和使用合适的UI库如何解决
Android项目架构设计问题之选择和使用合适的UI库如何解决
79 0

热门文章

最新文章