gpt4 book ai didi

android - 如何从 "extends Application"类创建 Intent ,上下文为空

转载 作者:搜寻专家 更新时间:2023-11-01 08:14:06 24 4
gpt4 key购买 nike

我有一个扩展 android.app.Application 的类,我用它来保存我的应用程序周围的全局状态。

我想在我的应用程序启动时启动一个服务,所以在这个 GlobalState 类的构造函数中,我尝试创建一个 Intent 并启动一个服务,但我无法创建一个 Intent ,因为我无法获取 Context

public GlobalState() {
Log.d(this.getClass().getSimpleName(), "Initialise DatabaseManager");
dbManager = new DatabaseManager(this);

Log.d(this.getClass().getSimpleName(), "Requesting start up of ContactsUpdater Service");
Intent i = new Intent(this, ContactsUpdater.class);
startService(i);
}

我试过使用 getApplicationContext(),但这会引发空指针异常。

java.lang.NullPointerException异常 在 android.content.ContextWrapper.getPackageName(ContextWrapper.java:120) 在 android.content.ComponentName.(ComponentName.java:75) 在 android.content.Intent.(Intent.java:2551) 在 com.jameselsey.apps.cercademi.domain.GlobalState.(GlobalState.java:48) 在 java.lang.Class.newInstanceImpl( native 方法) 在 java.lang.Class.newInstance(Class.java:1479) 在 android.app.Instrumentation.newApplication(Instrumentation.java:957) 在 android.app.Instrumentation.newApplication(Instrumentation.java:942) 在 android.app.ActivityThread$PackageInfo.makeApplication(ActivityThread.java:518)

我很困惑,我可以使用它创建 DatabaseManager ......

有什么想法吗?

最佳答案

对于Activity、Service、ContentProvider和Application,你不应该在构造函数中做任何事情。当您知道对象已初始化并准备好使用时,您应该做的第一个工作是 onCreate()。

此外,请再想想“我想在我的应用程序启动时启动一个服务”。您在此处编写的代码是在您的进程 刚好启动时尝试启动服务。我真的不认为你想要那个。您希望启动此服务是因为您碰巧在后台收到了广播?

如果您只想进行一些首次初始化,我的建议是根本不要使用 Application。有一个可以在需要时检索的单例。然后你的初始化发生在实际需要的时候。无需将此与服务相关联;你可以做一个线程。使用服务的唯一原因是告诉系统“我的应用正忙于执行用户关心的后台工作,请不要杀了我。”

关于android - 如何从 "extends Application"类创建 Intent ,上下文为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6481553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com