android - ActivityRetainedLifecycle.OnClearedListener 应该如何使用?
问题描述
我正在@ActivityRetainedScoped
通过 Hilt 注入一个组件。该组件正在注册一个侦听器,因此我想确保它自行清理并且不会泄漏任何内容。
我ActivityRetainedLifecycle.OnClearedListener
在 JavaDocs for Hilt 中看到过,但没有看到任何使用它的示例。
例如,以 WifiManager 为例,目前我正在这样做:
@ActivityRetainedScoped
public class Wifi {
@Inject
public Wifi(
@NonNull final Application application,
@NonNull final ActivityRetainedLifecycle activityRetainedLifecycle,
@NonNull final WifiManager wifiManager
) {
final Context applicationContext = application.getApplicationContext();
final IntentFilter intentFilter = /* Init intentFilter */
final WifiScanReceiver wifiScanReceiver = /* Init wifiScanReceiver */
applicationContext.registerReceiver(wifiScanReceiver, intentFilter);
activityRetainedLifecycle.addOnClearedListener(() -> {
applicationContext.unregisterReceiver(wifiScanReceiver);
});
}
}
这感觉不言自明,但我之前已经被这样的假设所烧毁,并且在网上找不到太多来验证我的假设。
这是“拆除”具有外部依赖关系的活动保留组件以确保它不会泄漏的正确方法吗?
解决方案
是的,根据文档。
谢谢!由于您的问题,我找到了它。
有趣的是,它还解释了它的机制
具体来说,当 Activity.isChangingConfigurations() 为 false 时,这将在 Activity.onDestroy() 期间调用。
推荐阅读
- java - 为什么在编译时确定方法重载分辨率?
- rx-java - 在 couchbase java sdk 2.7.15 上使用异步存储桶更新文档
- salesforce - sql查找最近1小时内修改的数据
- swift - 我们能否为基于英特尔处理器的 AppleSilicon 处理器提供产品应用程序和程序?
- javascript - 等待 Dispatch 的结果(React-Redux)
- google-sheets - Google 表格:查询函数和分隔符/分隔符行
- c# - CognitoUser 不包含包含 4 个参数错误的构造函数,并且在 ASP.NET C# 上没有 StartWithSrpAuthAsync 的定义
- .net - asp.net core mvc 审核通过后更新
- powershell - Powershell 计算属性和 Tee 对象/变量
- javascript - 无法访问来自 JSON 接收标题的数据未定义