这可能是一个简单的问题,但我只想确保我是正确的。
在我的Android应用程序中,我有一个使用以下内容的构造函数:
activity.getApplicationContext()
活动被作为参数传递到构造函数中。问题是我从服务中调用这个类。如果我创建另一个构造函数,它接受服务作为参数并使用
service.getApplicationContext
,那么我会得到相同的应用程序上下文吗?这可能是一个简单的问题,但我只想确保我是正确的。
在我的Android应用程序中,我有一个使用以下内容的构造函数:
activity.getApplicationContext()
活动被作为参数传递到构造函数中。service.getApplicationContext
,那么我会得到相同的应用程序上下文吗?获取应用上下文最简单的方法是:
创建一个名为App
、继承自android.app.Application
的类。
public class App extends Application {
public static Context context;
@Override public void onCreate() {
super.onCreate();
context = getApplicationContext();
}
}
修改你的AndroidManifest.xml
文件中的<application>
标签,将属性android:name="your.package.name.App"
添加进去。
每当你需要应用程序的上下文时,只需从App.context
获取即可。
Application
始终是最先初始化的,无论你的进程运行方式是活动、服务或其他类型。你将始终可以访问应用程序上下文。
我会得到相同的应用程序上下文吗?
是的。您可以查看Android文档,它们已经提供了。
getApplicationContext()
返回当前进程单一全局 Application 对象的上下文。
因此,它应该在整个应用程序进程中保持不变。
请注意:
getApplicationContext()
通常仅在需要一个生命周期与当前上下文分离、与进程寿命而非当前组件寿命相关联的 Context 时使用。
如有错误,请指正。
谢谢。
只有一个应用程序上下文,因此您应该获得相同的上下文。您可以只拥有一个构造函数,它需要一个Context
,您不需要两个。或者,如果您想确保获取的是应用程序上下文,而不是活动上下文,则可以使您的构造函数采用Application
作为参数,这是一个Context
。
domain.company.pseudo.ApplicationName
,它扩展android.app.Application
。package hypersoft.systems.android;
import android.app.Application;
public class Starbox extends Application {
public static Starbox instance;
@Override
public void onCreate() {
super.onCreate();
instance = this;
}
}
hypersoft.systems.android.starbox
。<application>
标签,使其具有属性 android:name="hypersoft.systems.android.Starbox"
,并确保 Starbox.java
类文件位于项目组件目录:android
而不是 starbox
。import hypersoft.systems.android.Starbox
,并在您的代码中通过调用 Starbox.instance.getApplicationContext()
来获取 ApplicationContext
。如果您想获取整个应用程序的上下文,请使用getApplicationContext()
。如果您想要获取当前类的上下文,则可以使用getBaseContext()
。
Application Context和Activity Context是不同的。向下转型是有风险的。使用以下代码来使用context对象。
public class App extends Application {
public static Context context;
@Override public void onCreate() {
super.onCreate();
context = getApplicationContext();
}
}