美文网首页
工具技巧篇—获取全局Context

工具技巧篇—获取全局Context

作者: 陈大集 | 来源:发表于2015-10-31 14:13 被阅读939次

    在Android开发中,我们经常会使用到Context对象,Context即上下文环境,如当我们想要输出调试信息时,经常使用的

    Toast.makeText(this,"Android小技巧-获取全局Context", Toast.LENGTH_SHORT).show();
    //public static Toast makeText(Context context, CharSequence text, @Duration int duration)
    
    存在的问题

    1.每次都需要传入Context对象十分繁琐;
    2.一般是从Activity和Fragment等组件中获取,当方法脱离了它们后,无法获取,需要传入Context参数,治标不治本。
    3.传统的做法限制了框架的发展,如无法将Toast方法封装,即�传统的方法是

    public static toast(Context context,String msg){
        Toast.makeText(context,"Android小技巧-获取全局Context", Toast.LENGTH_SHORT).show();
    }
    

    传统的封装方式把Context的来源交给了调用者,未免有些不负责任,那么理想的方式是Toast只需关注要显示的msg,无需关注context,即

    public static toast(String msg){
        Toast.makeText(全局Context,"Android小技巧-获取全局Context", Toast.LENGTH_SHORT).show();
    }
    
    解决的方案

    Android提供了一个Application类,每当App启动时,系统会将Application进行初始化,并存在于App的整个生命周期中。

    细心的开发者会注意到,我们可以在Application内对一些全局状态的信息进行管理,如Context、如Volley的RequestQueue、如Universal-Image-Loader的初始化。

    那么,在Application中,我们只需在程序启动时获取一次Context,随后需要Context的地方只需从Application中获取即可。

    核心代码如下:

    //上下文
    public static Context context;
    public static Context getContext() {    return context;}
    
    @Overridepublic void onCreate() {    
        super.onCreate();
        context = getApplicationContext();
    }
    

    整体代码

    public class App extends Application {
    
        public static App app;//单例化Application
        public static App getApp() {    
            if (app == null) {        
                synchronized (App.class) { //线程安全           
                    if (app == null) {                
                        app = new App();            
                     }        
                 }    
            }    
           return app;
        }
    
        //上下文
        public static Context context;
        public static Context getContext() {    return context;}
    
        @Overridepublic void onCreate() {    
            super.onCreate();
            context = getApplicationContext();
        }
    }
    

    当然,别忘记了在AndroidManifest.xml中的Application标签添加

    <application    
        android:name="包名.App"
        ....../>
    

    相关文章

      网友评论

          本文标题:工具技巧篇—获取全局Context

          本文链接:https://www.haomeiwen.com/subject/cpofhttx.html