Android 将活动传递给LifecycleObserver
我需要将活动传递给LifecycleObserver类以执行位置任务:Android 将活动传递给LifecycleObserver,android,memory-leaks,android-lifecycle,android-architecture-components,lifecycleowner,Android,Memory Leaks,Android Lifecycle,Android Architecture Components,Lifecycleowner,我需要将活动传递给LifecycleObserver类以执行位置任务: class LocationObserver( private val context: Context, private val activity: FragmentActivity) : LifecycleObserver { private var locationClient: FusedLocationProviderClient? = null priva
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类是否会导致内存泄漏?如果是这样,解决办法是什么?非常感谢您的回答/评论 如果片段存在于
活动
中,那么您的片段
可能不会有更长的生命周期,因此即使您保留对该活动的引用,也不会真正发生泄漏
但是,只要您删除
LocationObserver
中的所有活动
引用,您就会感到非常安全。您是如何实例化和使用LocationObserver的?@Ahmed I.Khalil Hi,LocationObserver是在片段中创建和使用的-我添加到问题中。是的,在LifecycleObserver中保留活动引用将导致内存泄漏。为了防止出现这种情况,您可以使用LiveData
或Callback
将您的数据提供回活动。谢谢!请告诉我在onDestroy()方法中,我应该在LocationObserver的何处调用:activity=null?