安卓开发之全局获取Context

2017-05-27  本文已影响0人  白於青

某些情况下,我们并不能方便的获取上下文环境,因为我们所调用的函数或者类中有时并不存在相关的参数,放心啦,不要尬,安卓为我们提供了一个Applocation类,以便于我们去管理程序内的一些全局的状态信息,比如说全局Context。
  首先,我们需要定制一个自己的Applocation类去继承Applocation。示例如下:

public class MyApplication extends Applocation {

    private static Context context;

    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
    }

    public static Context getContext() {
        return context;
    }

}  

很简单吧,就是重写了父类的onCreate方法,利用函数getApplicationContext()获取了一个应用程序级别的Context,然后提供了一个静态的getContext方法将上述context返回。
程序启动的时候会初始化Application类,我们要告知系统修改其默认做法,转而启动我们自定义的MyApplication类。具体来说就是在AndroidManifest.xml文件的<application>标签下进行指定。代码如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    ......
    <application
        android:name="com.example.test.MyApplication" 
        ......>
    ......
    </application>
</manifest>

需要注意的是,我们需要在该标签中输入你所开发项目的完整的包名。
  此外,《第一行代码》这本书中提到了一个很重要的问题:由于每个项目只能有一个Application,当我们使用第三方开源项目如Litepal等对application的配置有需求的资源时,就不能使用上述方法重复配置了,错误的示范如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    ......
    <application
        android:name="com.example.test.MyApplication" 
        android:name="org.litpal.LitePalApplication"
        ......>
    ......
    </application>
</manifest>

辣么,要肿么做呢?很简单,在我们自定义的Application中加入对litepal的支持就好了,示例如下:

public class MyApplication extends Applocation {

    private static Context context;

    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
        LitePalApplication.initialize(context);
    }

    public static Context getContext() {
        return context;
    }

}  

这样一来,可以实现同样的配置效果,又不会发生冲突哈,棒棒哒!

上一篇下一篇

猜你喜欢

热点阅读