全局获取Context

public class MyApplication extends Application {
    public static Context context;
    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
    }

    public static Context getContext() {
        return context;
    }
}

继承Application获得一个应用程序级别的Context,之后在任何的类中需要context调用MyApplication.getContext即可,需要在<application 标签下配置name 告诉程序启动初始化MyApplication


### 如何通过 BaseApplication 获取全局 Context 在 Android 开发中,`Context` 是一个非常重要的概念,用于提供对应用程序环境的访问。为了在整个应用生命周期内保持一致的 `Context` 访问,通常会创建一个自定义的应用程序类(继承自 `Application`),并将其作为全局 `Context` 使用。 #### 创建自定义 Application 类 可以通过扩展 `Application` 类来实现自定义的全局 `Context` 提供者。以下是一个典型的实现方式: ```java public class BaseApplication extends Application { private static BaseApplication instance; @Override public void onCreate() { super.onCreate(); instance = this; } public static BaseApplication getInstance() { return instance; } } ``` 在这个例子中,`BaseApplication` 被用来保存当前应用实例的一个静态引用。这样可以在任何地方调用 `BaseApplication.getInstance()` 来获取全局 `Context`[^1]。 #### 配置 AndroidManifest.xml 为了让系统知道我们正在使用自定义的 `Application` 类,需要在 `AndroidManifest.xml` 文件中声明该类: ```xml <application android:name=".BaseApplication" android:icon="@mipmap/ic_launcher" android:label="@string/app_name"> </application> ``` 这里的关键是设置 `android:name` 属性为 `.BaseApplication` 或完整的包路径名[^2]。 #### 使用全局 Context 一旦配置完成,就可以在任意位置通过 `BaseApplication.getInstance()` 方法获得全局 `Context` 实例。例如,在某个活动中可以这样做: ```java Context globalContext = BaseApplication.getInstance(); // 使用全局 Context 启动一个新的 Activity Intent intent = new Intent(globalContext, AnotherActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 如果不在 UI 线程上启动,则需加上此标志位 globalContext.startActivity(intent); // 或者获取资源文件 String appName = globalContext.getString(R.string.app_name); Log.d("AppName", appName); ``` 需要注意的是,当从非活动线程或者服务中启动新的界面组件时,可能需要添加 `FLAG_ACTIVITY_NEW_TASK` 标志以确保正常运行[^3]。 #### 注意事项 虽然全局 `Context` 很有用,但它并不总是适合所有的场景。比如,如果需要绑定到特定视图的操作(如显示 Toast 消息或更新 UI),应该优先考虑局部 `Context`(如来自 `Activity` 或 `Fragment` 的实例)。滥用全局 `Context` 可能会引起内存泄漏或其他不可预期的行为[^5]。 --- ### 示例代码总结 以上展示了如何利用自定义 `Application` 子类存储和检索全局 `Context`,并通过实际案例说明其用途以及注意事项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值