注:精简了原文。 完整精彩原文地址:http://blog.youkuaiyun.com/android_tutor/article/details/8026018
有时我们需要在一个工具类中用到上下文context。当然有一个做法就是使用传递context的方法,当我们需要用全局context的时候,该怎么办呢?
其实我们应用启动的时候会启动Application这个类,这个类是在AndroidManifest.xml文件里其实是默认的
- <application
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- >
- <activity
- android:name=".ApplicationDemoActivity"
- android:label="@string/app_name" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
这个Application类是单例的,也就是说我们可以自己写个Application(比如名为:MainApplication)类,来代替默认的Applicaiton,这个类可以保存应用的全局变量,
(1)我们可以定义一个全局的Context.供外部调用
.用法如下:
- package com.example.contextandroid;
-
- import android.app.Application;
- import android.content.Context;
-
- public class MainApplication extends Application{
-
-
-
- private static Context mContext;
-
- @Override
- public void onCreate() {
- super.onCreate();
- mContext = getApplicationContext();
- }
-
-
-
-
-
- public static Context getContext(){
- return mContext;
- }
-
- @Override
- public void onLowMemory() {
- super.onLowMemory();
- }
-
- }
我们需要在(2)
AndroidMainifest.xml把MainApplication注册
进去(第10行代码):
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.tutor.application"
- android:versionCode="1"
- android:versionName="1.0" >
-
- <application
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:name=".MainApplication" >
- <activity
- android:name=".ApplicationDemoActivity"
- android:label="@string/app_name" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
-
- </manifest>
那么,我们在一个.java文件的工具类中。可以这样调用全局的context:
-
-
-
-
- public static void showToast(String msg){
- Toast.makeText(MainApplication.getContext(), msg, Toast.LENGTH_SHORT).show();
- }