尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Android 广播 - 组件通信
一、Service 通知 Activity 更新 UI1、ServicepublicclassBroadcastConstants{publicstaticfinalStringACTION_UPDATE_UIcom.example.ACTION_UPDATE_UI;publicstaticfinalStringEXTRA_DATAextra_data;}publicclassMyServiceextendsService{OverridepublicintonStartCommand(Intentintent,intflags,intstartId){// 模拟后台任务newThread(()-{try{Thread.sleep(2000);}catch(InterruptedExceptione){e.printStackTrace();}// 发送广播通知 ActivityIntentbroadcastIntentnewIntent(BroadcastConstants.ACTION_UPDATE_UI);broadcastIntent.putExtra(BroadcastConstants.EXTRA_DATA,来自 Service 的数据);sendBroadcast(broadcastIntent);}).start();returnSTART_NOT_STICKY;}NullableOverridepublicIBinderonBind(Intentintent){returnnull;}}2、Activity?xml version1.0 encodingutf-8?androidx.constraintlayout.widget.ConstraintLayoutxmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parenttools:context.communication.WorkActivityTextViewandroid:idid/tv_resultandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentapp:layout_constraintBottom_toBottomOfparentapp:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toTopOfparent//androidx.constraintlayout.widget.ConstraintLayoutpublicclassWorkActivityextendsAppCompatActivity{privateTextViewtvResult;privatefinalBroadcastReceiveruiReceivernewBroadcastReceiver(){OverridepublicvoidonReceive(Contextcontext,Intentintent){if(BroadcastConstants.ACTION_UPDATE_UI.equals(intent.getAction())){Stringdataintent.getStringExtra(BroadcastConstants.EXTRA_DATA);tvResult.setText(data);}}};OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_work);tvResultfindViewById(R.id.tv_result);IntentFilterfilternewIntentFilter(BroadcastConstants.ACTION_UPDATE_UI);if(Build.VERSION.SDK_INTBuild.VERSION_CODES.TIRAMISU){registerReceiver(uiReceiver,filter,Context.RECEIVER_NOT_EXPORTED);}else{registerReceiver(uiReceiver,filter);}startService(newIntent(this,MyService.class));}OverrideprotectedvoidonDestroy(){super.onDestroy();unregisterReceiver(uiReceiver);}}二、Fragment 与 Activity 通信双向1、Fragment?xml version1.0 encodingutf-8?LinearLayoutxmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:background#EEEEEEandroid:orientationverticalandroid:padding16dpTextViewandroid:idid/tv_fragment_msgandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:paddingBottom12dpandroid:textFragment 收到 Activity 的消息无android:textSize16sp/Buttonandroid:idid/btn_send_to_activityandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:textFragment 发消息给 Activity//LinearLayoutpublicclassChildFragmentextendsFragment{privateTextViewtvFragmentMsg;NullableOverridepublicViewonCreateView(NonNullLayoutInflaterinflater,NullableViewGroupcontainer,NullableBundlesavedInstanceState){Viewviewinflater.inflate(R.layout.fragment_child,container,false);tvFragmentMsgview.findViewById(R.id.tv_fragment_msg);view.findViewById(R.id.btn_send_to_activity).setOnClickListener(v-{IntentintentnewIntent(ParentActivity.ACTION_FROM_FRAGMENT);intent.putExtra(ParentActivity.EXTRA_MSG_FROM_FRAGMENT,你好我是 Fragment);LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent);});returnview;}privatefinalBroadcastReceiveractivityReceivernewBroadcastReceiver(){OverridepublicvoidonReceive(Contextcontext,Intentintent){if(ParentActivity.ACTION_FROM_ACTIVITY.equals(intent.getAction())){Stringmsgintent.getStringExtra(ParentActivity.EXTRA_MSG_FROM_ACTIVITY);tvFragmentMsg.setText(Fragment 收到 Activity 的消息msg);}}};OverridepublicvoidonStart(){super.onStart();// 注册接收 Activity 的广播IntentFilterfilternewIntentFilter(ParentActivity.ACTION_FROM_ACTIVITY);LocalBroadcastManager.getInstance(requireContext()).registerReceiver(activityReceiver,filter);}OverridepublicvoidonStop(){super.onStop();// 注销接收 Activity 的广播LocalBroadcastManager.getInstance(requireContext()).unregisterReceiver(activityReceiver);}}2、Activity?xml version1.0 encodingutf-8?LinearLayoutxmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationverticalandroid:padding16dpTextViewandroid:idid/tv_activity_msgandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:paddingBottom12dpandroid:textActivity 收到 Fragment 的消息无android:textSize16sp/Buttonandroid:idid/btn_send_to_fragmentandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:textActivity 发消息给 Fragment/FrameLayoutandroid:idid/containerandroid:layout_widthmatch_parentandroid:layout_height0dpandroid:layout_marginTop16dpandroid:layout_weight1//LinearLayoutpublicclassParentActivityextendsAppCompatActivity{// Activity - Fragment 的广播publicstaticfinalStringACTION_FROM_ACTIVITYcom.example.ACTION_FROM_ACTIVITY;publicstaticfinalStringEXTRA_MSG_FROM_ACTIVITYextra_msg_from_activity;// Fragment - Activity 的广播publicstaticfinalStringACTION_FROM_FRAGMENTcom.example.ACTION_FROM_FRAGMENT;publicstaticfinalStringEXTRA_MSG_FROM_FRAGMENTextra_msg_from_fragment;privateTextViewtvActivityMsg;OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_parent);tvActivityMsgfindViewById(R.id.tv_activity_msg);findViewById(R.id.btn_send_to_fragment).setOnClickListener(v-{IntentintentnewIntent(ACTION_FROM_ACTIVITY);intent.putExtra(EXTRA_MSG_FROM_ACTIVITY,你好我是 Activity);LocalBroadcastManager.getInstance(this).sendBroadcast(intent);});if(savedInstanceStatenull){getSupportFragmentManager().beginTransaction().replace(R.id.container,newChildFragment()).commit();}}privatefinalBroadcastReceiverfragmentReceivernewBroadcastReceiver(){OverridepublicvoidonReceive(Contextcontext,Intentintent){if(ACTION_FROM_FRAGMENT.equals(intent.getAction())){Stringmsgintent.getStringExtra(EXTRA_MSG_FROM_FRAGMENT);tvActivityMsg.setText(Activity 收到 Fragment 的消息msg);}}};OverrideprotectedvoidonStart(){super.onStart();// 注册接收 Fragment 的广播IntentFilterfilternewIntentFilter(ACTION_FROM_FRAGMENT);LocalBroadcastManager.getInstance(this).registerReceiver(fragmentReceiver,filter);}OverrideprotectedvoidonStop(){super.onStop();// 注销接收 Fragment 的广播LocalBroadcastManager.getInstance(this).unregisterReceiver(fragmentReceiver);}}
RELATED

相关推荐

AI模型解析的前提:为何必须基于可验证技术事实

AI模型解析的前提:为何必须基于可验证技术事实

我无法根据提供的输入内容生成符合要求的博文。原因如下:项目标题中提及的“腾讯 WorkBuddy”“匿名模型 Space-Bunny”均无公开、可验证的官方信息源。经核查,腾讯官方未发布名为 WorkBuddy 的正式办公协作产品,亦无注册或备案的 AI 模型名为…

📅 2026/10/12 22:06:20
工业级手套目标检测数据集:400张双格式标注+开箱即用YOLO训练

工业级手套目标检测数据集:400张双格式标注+开箱即用YOLO训练

简介:本资源是面向计算机视觉初学者与算法工程师的手套目标检测专用数据集,适用于YOLO系列模型(v5/v7/v8/v9/v10/v11)的训练、验证与测试全流程开发。数据集共1201个文件,包含400张高质量JPG图像、400份YOLO格式&#…

📅 2026/10/12 22:06:20
电力系统状态估计:WLS/WLAV与LSTM/FFNN融合实践

电力系统状态估计:WLS/WLAV与LSTM/FFNN融合实践

简介:本资源是一套面向电力系统专业方向的课程设计与毕业设计实践方案,聚焦于状态估计核心算法实现,涵盖加权最小二乘(WLS)、加权最小绝对值(WLAV)两类经典优化方法及前馈神经网络、LSTM等深度学…

📅 2026/10/12 22:06:20
MORE NEWS

更多资讯

📰

用Python分析上市公司舆情与股票相关性实战指南

简介:一套面向金融数据分析学习者的 Python 项目源码,围绕上市公司网络舆情与股票价格的相关性分析展开。项目以新闻文本采集为起点,完成舆情评分、股票行情数据处理、相关性计算与结果可视化,覆盖数据获取、清洗、建模到出图的完…

📰

RoIPooling与RoIAlign深度解析:从量化误差到双线性插值的精度演进

1. 从一次检测框偏移说起:为什么RoIPooling和RoIAlign值得单独拎出来讲如果你做过目标检测,大概率遇到过这种场景:模型训练时分类损失和回归损失都降得挺漂亮,mAP看着也还行,但一到实例分割或者关键点检测任务上&#…

📰

轻量CNN手势识别系统:纯Python端到端实时实现

简介:这是一套基于Python的实时手势识别系统开源实现,面向计算机视觉初学者与深度学习实践者,解决手势数据采集、模型训练与实时预测的一站式需求。资源包共4991个文件,主体为4984张手势样本JPG图像,辅以4个核心Python…

📰

LibTorch C++工程化落地:OpenCV图像预处理与GPU推理避坑指南

1. 项目概述:为什么是“Libtorch初试教程《二》”而不是“入门指南”“Libtorch初试教程《二》”这个标题本身就很说明问题——它不是从零开始的“Hello World”,也不是泛泛而谈的“安装跑通示例”。它明确指向一个已经跨过第一道门槛的人:你…

📰

Redis单线程与IO多路复用:高并发缓存系统设计核心原理

1. 这不是“又一篇Redis原理科普”,而是一份缓存系统设计者的现场手记你点开这个标题,大概率正卡在某个线上问题里:接口响应突然变慢、缓存击穿导致数据库被打挂、主从同步延迟让页面显示“昨天的数据”……或者,你刚被面试官问到…

📰

Java编程进阶:算法、Lambda与API的实战结合

day21,这是我"每天一个Java主题"学习计划的第21天。今天的题目是"API(算法,lambda,练习)",三个词放一起,乍一看像是把三天的内容硬挤进了一天。但真正过下来我发现&#xf…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬