Android 中保存全局变量Context

1,392 阅读2分钟

小知识,大挑战!本文正在参与“ 程序员必备小知识

本文同时参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金

在学习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);
    }
}