1

我正在构建一个具有某些功能的 android 库,将由 3rd 方应用程序使用。在我的库中,我需要访问与网络相关的内容,并且需要访问 Context.getSystemService() 以获取 ConnectivityManager。例如 -

ConnectivityManager connectivityManager = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE));

问题是我没有活动类来获取上下文。所以2个问题-

  1. 有没有办法获取调用我的库方法的 Activity 的上下文?
  2. 要求应用程序(调用我的库)将应用程序的活动上下文传递给第 3 方库是一个好习惯吗?

谢谢!

4

1 回答 1

1

理想情况下,您永远不应该传递上下文来检索资源。您应该传递资源本身(在本例中为 ConnectivityManager)。如果这不切实际(因为你需要几个资源,或者你需要不时重新加载它们),或者资源本身与 Context 的生命周期绑定,而应用程序上下文无用,那么你应该传递上下文,但也应该如果需要,可以擦除引用,这样可以避免泄漏和崩溃。比如添加一个setContext(Context context)方法,在离开activity的时候设置context为null。不是很漂亮,但考虑到您无法控制用户的行为,这是最安全的选择。一个类似的选项是删除库对象引用,但这不会停止您的库在下一次扫描 GC 之前可能对上下文执行的任何操作。请记住,即使您的库在主线程中运行,您的应用程序也可以随时发送到后台。

于 2017-04-26T04:00:13.417 回答