可以静态存储系统服务导致内存泄漏吗?

时间:2019-02-11 15:08:20

标签: java android android-context

我们都知道,静态存储上下文对象(而不是应用程序上下文)是一种不好的做法,因为它可能导致内存泄漏。但是,您可以存储从上下文对象派生的系统服务吗?例如ConnectivityManager

// Is this okay?
static ConnectivityMananger connectivityManager;
...
connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

1 个答案:

答案 0 :(得分:3)

我建议使用应用程序Context来获得这样的系统服务:

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

可能所有系统服务都在内部使用应用程序Context,但是这种方法越来越安全,以额外的方法调用为代价。

如果系统服务正在使用应用程序Context,则在获取系统服务时不会泄漏Context。您是否会因使用系统服务而泄漏其他任何东西。