Android 广播 - 组件通信

发布时间:2026/10/12 22:06:26
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);}}

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询