Android中获取全局的Context技巧
2016-03-03 20:32
351 查看
在我们平常的开发中,很多时候我们新建的一个普通的java类文件(非Activity类的),在某些地方我们需要用到Context,弹出Toast的时候要、启动活动的时候要、发送广播的时候要、操作数据库和弹出通知的时候等。
由于活动本身就是一个Context对象,在Activity活动里面获得Context很简单,但是当很多逻辑代码他不是Activity的时候,那怎么能获取到Context呢?当然你可以在要调用的方法里面添加一个Context context 参数,但是还有一种更好的方法可以解决。
Android提供了一个Application类,每当程序启动的时候,系统会自动将这个类进行初始化,因此我们常可以看到某个程序引用第三方sdk需要初始化配置时,一般都会自定义一个Application类。而我们可以定制一个自己的Application类,以便与管理程序内一些全局的状态。
定义一个自己的Application并不复杂,首先建立一个MyApplication类继承于Application
代码如下:
可以看到,MyApplication中的代码非常简单。这里我们重写了父类的onCreate()方法,并通过调用getApplicationContext()方法得到了一个应用程序级别的Context,然后又提供了一个静态的getContext()方法,在这里将刚才获取到的Context进行返回。
接下来我们需要告知系统,当程序启动的时候应该初始化MyApplication类,而不是默认的Application类。这一步也很简单,在AndroidManifest.xml文件的<application>标签下进行指定就可以了,代码如下所示:
这样我们就已经实现了一种全局获取Context的机制,之后不管你想在项目的任何地方使用Context,只需要调用一下MyApplication.getContext()就可以了。
如果大家对此文有什么疑问,欢迎指出交流,谢谢!
由于活动本身就是一个Context对象,在Activity活动里面获得Context很简单,但是当很多逻辑代码他不是Activity的时候,那怎么能获取到Context呢?当然你可以在要调用的方法里面添加一个Context context 参数,但是还有一种更好的方法可以解决。
Android提供了一个Application类,每当程序启动的时候,系统会自动将这个类进行初始化,因此我们常可以看到某个程序引用第三方sdk需要初始化配置时,一般都会自定义一个Application类。而我们可以定制一个自己的Application类,以便与管理程序内一些全局的状态。
定义一个自己的Application并不复杂,首先建立一个MyApplication类继承于Application
代码如下:
public class MyApplication extends Application { private static Context context; @Override public void onCreate() { context = getApplicationContext(); } public static Context getContext() { return context; } }
可以看到,MyApplication中的代码非常简单。这里我们重写了父类的onCreate()方法,并通过调用getApplicationContext()方法得到了一个应用程序级别的Context,然后又提供了一个静态的getContext()方法,在这里将刚才获取到的Context进行返回。
接下来我们需要告知系统,当程序启动的时候应该初始化MyApplication类,而不是默认的Application类。这一步也很简单,在AndroidManifest.xml文件的<application>标签下进行指定就可以了,代码如下所示:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.networktest" android:versionCode="1" android:versionName="1.0" > …… <application android:name="com.example.contexttest.MyApplication" …… > …… </application> </manifest>注意:指定Application时一定要加上完整的包名。
这样我们就已经实现了一种全局获取Context的机制,之后不管你想在项目的任何地方使用Context,只需要调用一下MyApplication.getContext()就可以了。
如果大家对此文有什么疑问,欢迎指出交流,谢谢!
相关文章推荐
- Android Studio入门
- Android使用Volley上传文件
- android界面开发
- Android——SQLite实现面向对象CRUD
- [Android进阶]---WebView与js交互
- 【Android】应用安全——反编译
- Android Context完全解析,你所不知道的Context的各种细节
- android的surfaceflinger原理讲解
- 安卓初学三之控件初步(二)
- Handler机制总结
- Android从搭建环境到写第一个程序
- 使子控件超出父控件的限制
- 常见的Android优化方案
- Android中%n$s的使用
- android studio sdk 配置
- Android中的layout_width和width的区别
- 根据文本生成位图
- Android 自定义View(一) 介绍和一个简单TextView显示
- android:ImageView选择本地图片并显示
- Android——adb工具的使用