首页 > 解决方案 > 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);
        });
        
    }

}

这感觉不言自明,但我之前已经被这样的假设所烧毁,并且在网上找不到太多来验证我的假设。

这是“拆除”具有外部依赖关系的活动保留组件以确保它不会泄漏的正确方法吗?

标签: androiddagger-2dagger-hilt

解决方案


是的,根据文档。

谢谢!由于您的问题,我找到了它。

有趣的是,它还解释了它的机制

具体来说,当 Activity.isChangingConfigurations() 为 false 时,这将在 Activity.onDestroy() 期间调用。


推荐阅读