Java 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

我已经构建了一个singleton实用程序类,它包含两个android服务变量。我这样做是为了避免每次在类中使用方法时都需要传递“上下文”引用。保留对服务的引用会导致任何问题吗

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());
    }
}

因此,您的
单例
将与应用程序一起创建。结果是一样的。

谢谢。我从应用程序类设置该类,以便传入应用程序上下文。请记住,它将一直保留,直到整个进程被销毁。只要应用程序运行,就可以将其视为活动。另请参见: