在写andorid程序的时候,有时候会用到application这个context。获取方法无非是通过activity.getApplicationContext或者在app启动的时候将application存放在辅助类的静态变量中,以便随时获取。
但是还有一种获取方法,那就是通过反射ActivityThread这个类来获取。
public class Utils {
public static Application mApplication;
public static void init(Application application){
mApplication = application;
}
public static Application getApplication(){
if (mApplication == null) {
mApplication = getApplicationInner();
}
return mApplication;
}
public static Application getApplicationInner() {
try {
Class<?> activityThread = Class.forName("android.app.ActivityThread");
Method currentApplication = activityThread.getDeclaredMethod("currentApplication");
Method currentActivityThread = activityThread.getDeclaredMethod("currentActivityThread");
Object current = currentActivityThread.invoke((Object)null);
Object app = currentApplication.invoke(current);
return (Application)app;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}