获取应用程序上下文

gtd*_*vel 24 service android android-context android-activity

这可能是一个简单的问题,但我只是想确保我是对的.

在我的Android应用程序中,我有一个使用的构造函数:

activity.getApplicationContext()
Run Code Online (Sandbox Code Playgroud)

活动作为参数传递给构造函数.

问题是我从服务中调用此类.如果我创建第二个构造函数接受服务作为参数并使用service.getApplicationContext?我会获得相同的应用程序上下文吗?

Ran*_*ku' 56

获取应用程序上下文的最简单方法是:

创建一个App扩展的类android.app.Application

public class App extends Application {
    public static Context context;

    @Override public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
    }
}
Run Code Online (Sandbox Code Playgroud)

修改您AndroidManifest.xml<application>标签以获得该属性android:name="your.package.name.App".

只要您需要应用程序上下文,就可以从中获取它App.context.

Application始终首先初始化您的流程是否运行,无论是活动,服务还是其他.您将始终可以访问应用程序上下文.

  • Android Studio为此代码提供了此警告 - "不要将Android上下文类放在静态字段中; 这是一个内存泄漏(也打破了Instant Run)`.这真的是实现全局上下文变量的最佳方法吗? (8认同)
  • 我在某处看到了完全相同的方法,并且我正在使用它来在整个应用程序中访问应用程序上下文.但我不确定,这是实现这一目标的最佳做法吗?为什么访问应用程序的上下文不是作为Android SDK中的内置功能提供的? (5认同)
  • 应用程序不首先初始化,内容提供者在它之前初始化。 (3认同)
  • 这是内存泄漏 (2认同)

bHa*_*aTh 8

我会获得相同的应用程序上下文吗?

是.你可以查看他们提供的android文档

 getApplicationContext()
Run Code Online (Sandbox Code Playgroud)

返回当前进程的单个全局Application对象的上下文.

所以不应该为整个申请过程改变它.

请注意这个:

getApplicationContext() 通常只应在需要生命周期与当前上下文分离的上下文时使用,该上下文与进程的生命周期而不是当前组件相关联.

如我错了请纠正我.

谢谢