没有Activity,没有Application,快速获取当前应用的Application。当个工具类用,再也不烦恼,目前在Android P上并且是targetSdk为28也能获取到,已验证可用。
/**
* 获取当前应用的Application
* 先使用ActivityThread里获取Application的方法,如果没有获取到,
* 再使用AppGlobals里面的获取Application的方法
* @return
*/
public static Application getCurApplication(){
Application application = null;
try{
Class atClass = Class.forName("android.app.ActivityThread");
Method currentApplicationMethod = atClass.getDeclaredMethod("currentApplication");
currentApplicationMethod.setAccessible(true);
application = (Application) currentApplicationMethod.invoke(null);
Log.d("fw_create","curApp class1:"+application);
}catch (Exception e){
Log.d("fw_create","e:"+e.toString());
}
if(application != null)
return application;
try{
Class atClass = Class.forName("android.app.AppGlobals");
Method currentApplicationMethod = atClass.getDeclaredMethod("getInitialApplication");
currentApplicationMethod.setAccessible(true);
application = (Application) currentApplicationMethod.invoke(null);
Log.d("fw_create","curApp class2:"+application);
}catch (Exception e){
Log.d("fw_create","e:"+e.toString());
}
return application;
}

本文介绍如何在没有Activity和Application的情况下,通过反射技术快速获取当前Android应用的Application实例,适用于targetSdk为28的Android P系统,经验证有效。


被折叠的 条评论
为什么被折叠?



