我已经构建了一个单例实用程序类,其中包含几个 Android 服务变量。我这样做是为了避免每次在类中使用方法时都需要传递“Context”引用。保留对服务的引用会导致任何问题吗?
public class ConnectivityUtil {
// TODO: 5/24/2017 Is keeping a service as a member variable a good ida?
private static ConnectivityUtil instance;
private final ConnectivityManager connectivityManager;
private final WifiManager wifiManager;
private ConnectivityUtil(Context context) {
connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
wifiManager = (WifiManager) context.getApplicationContext()
.getSystemService(Context.WIFI_SERVICE);
}
public static void init(Context context) {
instance = new ConnectivityUtil(context);
}
public static ConnectivityUtil getInstance() {
return instance;
}
...
}
最佳答案
这取决于您传递什么类型的Context
。
如果您传递应用程序上下文
,这是一个很好的做法:
内部服务:
ConnectivityUtil.init(MyService.this.getApplicationContext());
如果直接通过Service
ConnectivityUtil.init(MyService.this);
服务被销毁后,您将出现内存泄漏。
但是最佳实践是在应用程序类中初始化单例类:
public class MainApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
ConnectivityUtil.init( getApplicationContext());
}
}
因此您的Singleton
将使用应用程序创建。结果是一样的。
关于java - Android服务类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44160610/