【发布时间】:2020-10-11 19:06:31
【问题描述】:
我需要将活动传递给 LifecycleObserver 类以执行定位任务:
class LocationObserver(
private val context: Context,
private val activity: FragmentActivity) : LifecycleObserver {
private var locationClient: FusedLocationProviderClient? = null
private val locationListener = OnSuccessListener { location: Location? ->
if (location != null) {
val lat = location.latitude
val long = location.longitude
...
}
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun start() {
locationClient = LocationServices.getFusedLocationProviderClient(activity)
...
locationClient?.lastLocation?.addOnSuccessListener(activity, locationListener)
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun stop() {
locationClient = null
}
}
LocationObserver 在片段中创建和使用:
public class LocationFragment extends Fragment {
private LocationObserver locationObserver;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
...
locationObserver = new LocationObserver(this.getContext(), this.getActivity());
getLifecycle().addObserver(locationObserver);
return root;
}
...
}
问题是:将活动传递给 LifecycleObserver-class 会导致内存泄漏吗?如果是这样,可能的解决方案是什么?非常感谢您的任何回答/评论!
【问题讨论】:
-
你是如何实例化和使用 LocationObserver 的?
-
@Ahmed I. Khalil 嗨,LocationObserver 已在片段中创建和使用 - 我添加到问题中。
-
是的,在你的 LifecycleObserver 中持有活动引用会导致内存泄漏。为了防止这种情况,您可以使用
LiveData或Callback将您的数据提供回活动。
标签: android memory-leaks android-lifecycle android-architecture-components lifecycleowner