通过应用程序从服务访问全局对象

Accessing Global Objects from Service via Application

问题描述

我正在编写基于 Android Service 的应用程序。在一些对象(例如导航器)的应用程序中,我在 Application class 中初始化,因此我可以从任何地方访问 then,它们是一种单例。

CustomApplication.java

public class CustomApplication extends android.app.Application {

    private Navigator navigator;

    public Navigator getNavigator() {
        return this.navigator;
    }

    @Override
    public void onCreate() {
        this.navigator = new Navigator();
    }
}

CustomService.java

public class CustomService extends Service {

    private Navigator navigator;

    @Override
    public void onCreate() {
        this.navigator = ((CustomApplication)getApplication()).getNavigator();
    }
}

问题

我有些怀疑调用

this.navigator = ((CustomApplication)getApplication()).getNavigator();

来自服务 onCreate() 并且通常来自任何方法都是不正确的,在应用程序被杀死且服务为 运行 的情况下,它可能会导致一些问题(例如。 nullpointer),我这样做是对的还是安全的,不会引起任何问题?

as in cases when application in killed

"application" 不是 "killed"。进程终止。如果您的代码是 运行,您的进程不会终止。 getApplication() 将在您的进程为 运行 时起作用。

也就是说,与标准 Java 单例相比,在这里使用自定义 Application 没有任何价值。