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






目录
相关文章
|
1月前
|
计算机视觉 Python
基于Dlib的人脸识别客户端(UI界面)
基于Dlib的人脸识别客户端(UI界面)
47 2
|
22天前
|
开发框架 JavaScript 前端开发
HarmonyOS UI开发:掌握ArkUI(包括Java UI和JS UI)进行界面开发
【10月更文挑战第22天】随着科技发展,操作系统呈现多元化趋势。华为推出的HarmonyOS以其全场景、多设备特性备受关注。本文介绍HarmonyOS的UI开发框架ArkUI,探讨Java UI和JS UI两种开发方式。Java UI适合复杂界面开发,性能较高;JS UI适合快速开发简单界面,跨平台性好。掌握ArkUI可高效打造符合用户需求的界面。
74 8
|
25天前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
70 6
|
27天前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
Android面试高频知识点(4) 详解Activity的启动流程
26 3
|
27天前
|
缓存 前端开发 Android开发
Android实战之如何截取Activity或者Fragment的内容?
本文首发于公众号“AntDream”,介绍了如何在Android中截取Activity或Fragment的屏幕内容并保存为图片。包括截取整个Activity、特定控件或区域的方法,以及处理包含RecyclerView的复杂情况。
18 3
|
1月前
|
XML 数据可视化 Android开发
Android应用界面
Android应用界面中的布局和控件使用,包括相对布局、线性布局、表格布局、帧布局、扁平化布局等,以及AdapterView及其子类如ListView的使用方法和Adapter接口的应用。
23 0
Android应用界面
|
27天前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
17 0
|
2月前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
讲解Activity的启动流程了,Activity的启动流程相对复杂一下,涉及到了Activity中的生命周期方法,涉及到了Android体系的CS模式,涉及到了Android中进程通讯Binder机制等等, 首先介绍一下Activity,这里引用一下Android guide中对Activity的介绍:
50 4
|
1月前
|
机器学习/深度学习 数据可视化 计算机视觉
基于opencv的车牌识别系统(UI界面采用tkinter设计)
基于opencv的车牌识别系统(UI界面采用tkinter设计)
34 0
|
2月前
|
XML Android开发 UED
💥Android UI设计新风尚!掌握Material Design精髓,让你的界面颜值爆表!🎨
随着移动应用市场的蓬勃发展,用户对界面设计的要求日益提高。为此,掌握由Google推出的Material Design设计语言成为提升应用颜值和用户体验的关键。本文将带你深入了解Material Design的核心原则,如真实感、统一性和创新性,并通过丰富的组件库及示例代码,助你轻松打造美观且一致的应用界面。无论是色彩搭配还是动画效果,Material Design都能为你的Android应用增添无限魅力。
65 1