android全局获取context

参考郭霖第二行代码

一个APP运行都是一个application,在这个application中分不同的activity等
看清单文件也能看出

1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name">
<activity android:name=".MainActivity">
...
</activity>
</application>
</manifest>

  • 整个清单文件先包括application,然后是里面的activity和server
  • 程序启动时候会初始化一个application,当整个程序停止运行了此application才会释放
  • 可以自己写一个application然后放一些全局的信息,如context

全局获取Context

  1. 首先重写一个application
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class MyApplication extends Application {
    private static Context context;
    @Override
    public void onCreate() {
    super.onCreate();
    context = getApplicationContext();
    }
    public static Context getContext(){
    return context;
    }
    }
  • 提供一个静态的context,重写oncreate方法,调用getApplicationContext获取全局context,这样调用MyApplication.getContext即可获取到context
  1. 在清单文件中把默认的application换成MyApplication
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <application
    android:name="cn.xwmdream.MyApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>
    </application>
  • 在application中加上了一个Android:name的属性,指定了MyApplication
  1. 这样在任何一个地方调用MyApplication.getContext()方法即可获取到context

通过application通信

可以在自定义的application提供以下方法来传递数据

1
2
3
4
5
6
7
private static String data;
public static void setData(String d){
data = d;
}
public static String getData(){
return data;
}

  • 在不同的地方中通过set和get传递数据