java - Android服务类变量

标签 java android performance memory

我已经构建了一个单例实用程序类,其中包含几个 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/

相关文章:

javascript - 在避免重复的同时有效地在 postgres 中实现分页?

Java 错误消息 "gc PS Mark Sweep in fire fighting mode"

java - 为什么 RxJava Observable.doOnDispose 会触发两次?

c# - Xamarin - 如何动态更改图像源?

android - 预装和特权保护级别之间的区别

Android Studio 显示对话框 "unable to create debug bridge : unable to start adb server: unable to obtain result of ' adb version'"

ruby-on-rails - 页面渲染速度提升

python - 我应该在应用程序中还是在数据库中生成 UUID?

java - HashMap 或哈希表中的重新哈希过程

java - ArrayList 在 jQuery 中迭代