小知识,大挑战!本文正在参与“ 程序员必备小知识
本文同时参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金
在学习Android的时候一直为context的问题觉得头疼,因为想做一些工具类,但是又不是四大组件,总要来回传递context,觉得很麻烦,就想全局获取,最后看到application是全局单例的,所以改造一下。
Context的中文翻译为:语境; 上下文; 背景; 环境,在开发中我们经常说称之为“上下文”,那么这个“上下文”到底是指什么意思呢?在语文中,我们可以理解为语境,在程序中,我们可以理解为当前对象在程序中所处的一个环境,一个与系统交互的过程。比如微信聊天,此时的“环境”是指聊天的界面以及相关的数据请求与传输,Context在加载资源、启动Activity、获取系统服务、创建View等操作都要参与。
那Context到底是什么呢?一个Activity就是一个Context,一个Service也是一个Context。Android程序员把“场景”抽象为Context类,他们认为用户和操作系统的每一次交互都是一个场景,比如打电话、发短信,这些都是一个有界面的场景,还有一些没有界面的场景,比如后台运行的服务(Service)。一个应用程序可以认为是一个工作环境,用户在这个环境中会切换到不同的场景,这就像一个前台秘书,她可能需要接待客人,可能要打印文件,还可能要接听客户电话,而这些就称之为不同的场景,前台秘书可以称之为一个应用程序。
想法很简单,实现也不复杂,主要的想法就是做一个单例,保存context
- 1.首先需要重写Application,主要重写里面的onCreate方法,就是创建的时候,初始化一个Map,这样就可以插入任意值。然后在整个应用中的各个文件中就可以对该变量进行操作了。
- 2.在程序中有两种获得方式getInstance() 和 在四大组件中通过 getApplication() 分别获得app
package com.xin.app;
import java.util.HashMap;
import java.util.Map;
import android.app.Application;
import android.util.Log;
/**
*
* @author silence鼬
* @url http://write.blog.csdn.net/mdeditor#!postId=46674445
* @tip 欢迎转载
*
*/
public class App extends Application {
private static App instance;
private Map innerMap = new HashMap();
@Override
public void onCreate() {
super.onCreate();
instance = this;//注意这里,不是常用的单例方式
}
public static App getInstance(){
Log.v("app", "getInstance instance "+instance.toString());
return instance;
}
public void addParam(Object key,Object value){
innerMap.put(key, value);
}
public Object getParam(Object key){
return innerMap.get(key);
}
}