Android中模块之间的通信|厄瑟兰汗
Android中模块之间的通信|厄瑟兰汗
今天,我们将向您展示我们如何 ** 在模块之间通信或共享数据** 在安卓中。但在继续前进之前,我想请你[ ** _跟随_**](/)
我的中型帐户以获取有关 Android 和其他技术相关主题的最新更新。
什么是模块或模块化编程?
模块化编程是一种软件设计技术,它强调将程序的功能分离为独立的、可互换的模块,这样每个模块都包含执行所需功能的一个方面所需的一切。
我们通常在 Android 中使用这种方法来开发功能,因此我们可以轻松地在另一个应用程序中使用此模块来重用相同的代码。如果我们在Android中使用Modular系统,我们也可以使用 ** 按需功能** Android 的内置功能可最小化我们的应用程序大小。
模块之间的通信:
Android中Modules之间有两种通信方式:
- 使用回调/接口
- 使用本地广播
使用回调/接口:
通过使用回调或接口方法,我们在高级模块上实现接口方法并从低级模块传递数据。假设我们有一个 Single Activity 应用程序,它只包含一个片段,即 第一个片段 和一个活动,即: 主要活动 ,我们称这个模块为高级模块。第二个模块包含一个片段,即 第二片段 .让我们开始编码,看看我们如何在 Android 中实现它:
我们有一个 主要活动 那个工具是 第二模块导航 ,所以我们必须重写它的方法。通过重写此方法,我们可以轻松地将第二模块的数据共享到第一模块或主模块:
班级 **主要活动** : AppCompatActivity(), **第二模块导航** {
覆盖 fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout. _活动主_ )
}
**覆盖乐趣 shareDataFromSecondModule(data: String) {
_吐司_ (数据)
}**
}
有趣的 Context.toast(消息:字符串){
Toast.makeText(这个,消息,吐司。 _LENGTH_SHORT_ )。节目()
}
第二片段 ,它将数据传递到按钮单击时的第一个或主模块:
班级 **第二片段** :片段(){
私有lateinit var绑定:FragmentSecondBinding
覆盖乐趣 onCreateView(
充气机:LayoutInflater,容器:ViewGroup?,
savedInstanceState:捆绑?
): 看法 {
绑定 = FragmentSecondBinding.inflate(充气机,容器,假)
返回绑定。 _根
_ }
覆盖乐趣 onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
设置监听器()
}
私人乐趣 setListener() {
binding.passData.setOnClickListener **{
(requireActivity() as SecondModuleNavigation).shareDataFromSecondModule("来自第二个模块的数据")**
**}
** }
}
打回来 或者 界面 用于两个模块之间的通信:
界面 **第二模块导航** {
乐趣 **shareDataFromSecondModule** (数据:字符串)
}
使用本地广播:
另一种方法是使用本地广播,我们在活动创建时注册本地广播,在活动销毁时取消注册广播。
主要活动 在创建时注册本地广播,在销毁时取消注册本地广播。
班级 **主要活动** : AppCompatActivity(), SecondModuleNavigation {
覆盖 fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout. _活动主_ )
**注册广播()**
}
覆盖乐趣 shareDataFromSecondModule(data: String) {
_吐司_ (数据)
}
私人乐趣 **注册广播** () {
LocalBroadcastManager.getInstance(this)
.registerReceiver(broadCastReceiver, IntentFilter( _BROADCAST_FROM_THIRD_MODULE_ ))
}
私人乐趣 **注销广播** () {
LocalBroadcastManager.getInstance(this)
.unregisterReceiver(broadCastReceiver)
}
私人价值 **广播接收器** =对象:广播接收器(){
覆盖 fun onReceive(contxt: Context?, intent: Intent?) {
什么时候(意图? _行动_ ) {
**_BROADCAST_FROM_THIRD_MODULE_** __ -> {
_吐司_ (intent.getStringExtra(Constants.DATA) ?: "")
}
}
}
}
覆盖有趣的 onDestroy() {
**注销广播()**
超级.onDestroy()
}
}
有趣的 Context.toast(消息:字符串){
Toast.makeText(这个,消息,吐司。 _LENGTH_SHORT_ )。节目()
}
对象常量 {
常量值 **BROADCAST_FROM_THIRD_MODULE** =“data_from_third_module”
}
第三片段 ,它使用按钮单击的意图将数据传递给主模块:
班级 **第三片段** :片段(){
私有lateinit var绑定:FragmentThirdBinding
覆盖乐趣 onCreateView(
充气机:LayoutInflater,容器:ViewGroup?,
savedInstanceState:捆绑?
): 看法 {
绑定 = FragmentThirdBinding.inflate(充气机,容器,假)
返回绑定。 _根
_ }
覆盖乐趣 onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
设置监听器()
}
私人乐趣 setListener() {
binding.passData.setOnClickListener **{
** val意图=意图( ** _BROADCAST_FROM_THIRD_MODULE_** )
意图.putExtra( ** _数据_** , "从第三个模块传递数据")
LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent)
**}
** }
}
对象常量 {
常量值 **数据** =“数据”
常量值 **BROADCAST_FROM_THIRD_MODULE** =“data_from_third_module”
}
现在就是这样。我将涵盖更多主题 安卓 , 爪哇 , 科特林 , 和 弹簧靴 在我即将发表的文章中。如果你喜欢这篇文章那么 ** _拍_**
** __** 尽可能多
万一你错过了:
- https://towardsdev.com/parallel-multiple-api-calls-or-network-calls-using-kotlin-coroutines-40cb5f313171
- https://towardsdev.com/kotlin-%EF%B8%8F-constructors-erselan-khan-984a5af2cac2
- https://medium.com/bazaar-tech/dynamically-update-refresh-reload-viewpager2-fragments-588fcbd6f859
表达你的爱 ❤️ 通过与您的开发人员同行分享这篇文章 并关注我的 Medium 帐户 ✈️
(关注我,了解更多关于 Android、Kotlin 和其他技术的内容。如果您有任何问题,请在此处询问我或发送电子邮件至[ [email protected]](/cdn-cgi/l/email-protection#70110203111c111e1b18111e49494430171d11191c5e131f1d)
我会尽力回应。)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通