Java Android服务类变量
我已经构建了一个singleton实用程序类,它包含两个android服务变量。我这样做是为了避免每次在类中使用方法时都需要传递“上下文”引用。保留对服务的引用会导致任何问题吗Java Android服务类变量,java,android,performance,memory,Java,Android,Performance,Memory,我已经构建了一个singleton实用程序类,它包含两个android服务变量。我这样做是为了避免每次在类中使用方法时都需要传递“上下文”引用。保留对服务的引用会导致任何问题吗 public class ConnectivityUtil { // TODO: 5/24/2017 Is keeping a service as a member variable a good ida? private static ConnectivityUtil instance; p
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;
}
...
}
这取决于您传递的
上下文类型
如果您通过了应用程序上下文
,这是一种良好的做法:
内部服务:
ConnectivityUtil.init(MyService.this.getApplicationContext());
如果你直接通过服务
ConnectivityUtil.init(MyService.this);
服务被破坏后,您将出现内存泄漏
但是,最佳实践是在应用程序类的单例类中:
public class MainApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
ConnectivityUtil.init( getApplicationContext());
}
}
因此,您的单例
将与应用程序一起创建。结果是一样的。谢谢。我从应用程序类设置该类,以便传入应用程序上下文。请记住,它将一直保留,直到整个进程被销毁。只要应用程序运行,就可以将其视为活动。另请参见: