首页 文章 精选 留言 我的

精选列表

搜索[数据绑定],共10030篇文章
优秀的个人博客,低调大师

Receiver和Service是如何做到和Activity的生命周期绑定的?

在Activity中registeReceiver或者bindService,如果Activity销毁时还没进行unregisterReceiver或者unbindService,就会出现如下错误: 1、未调用unregisterReceiver:android.app.IntentReceiverLeaked: Activity xxxxx has leaked 2、未调用unbindService:android.app.ServiceConnectionLeaked: Activity xxxxx has leaked 出现这两个错误的原因是:Activity在退出后会调用onDestroy方法,然后会释放一些资源,流程如下: finishActivity流程图 最终运行LoadedApk.removeContextRegistrations,该方法就是用来实现Receiver和Service的泄漏处理。 检测Activity的receiver释放leak 在Activity.finish后如果没有调用unregisterReceiver,就会出现泄漏。其中mReceivers是当前App注册的所有Receiver,在如果rmap不为空,且size大于0,说明Activity对应的Context中的Receiver还没有回收,Receiver会引用Activity,Activity就存在Leak。那么mReceiver中的值是哪里来的呢?答案就是regeisterReceiver函数,流程如下: register unregister流程 在注册广播的时候调用LoadedApk.getReceiverDispatcher会将BroadcastReceiver存储到mReceiver中,unRegisterReceiver会通过forgetReceiverDispatcher将BroadcastReceiver从mReceiver中移除,如果没有unRegisterReceiver,在退出Activity就会出现android.app.IntentReceiverLeaked: Activity xxxxx has leaked错误。 检查Service是否泄漏 如果smap中Activity的Context对应的ServiceDispatcher不为空,说明Activity在调用bindService后没有主动调用unbindService,而ServiceConnectin会引用Activity,Activity就会存在Leak。流程和Receiver类似: bindService unbindService bindService或调用LoadedApk.getServiceDispatcher将ServiceDispatcher加入mService中,unbindService通过forgetServiceDispatcher将ServiceDispatcher进行移除。如果不调用unbindService就会出现Activity Leak。 但是在APP运行的时候并没有出现Crash,是因为LoadedApk.removeContextRegistrations只是打印了泄漏信息,之后会再次调用AMS的unregisterReceiver或者unbindService。 因此,Receiver和bindService可以实现和Activity生命周期的联动。

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册