随时获取全局对象Application的方式主要有两种:
自定义Application
- 创建自己的Application继承自Application
class BaseApplication : Application() {
companion object{
lateinit var application: BaseApplication
}
override fun onCreate() {
super.onCreate()
application = this
}
}
- 在AndroidManifest.xml中将使用自定义的Application
<application
android:name=".BaseApplication">
</application>
- 使用
Toast.makeText(BaseApplication.application, response.body()?.string()?.trim() ?: "null", Toast.LENGTH_SHORT).show()
反射获取
- 通过反射获取,谷歌开始对于一些方法或者类禁止反射
public class AppGlobals {
private static Application mApplication;
public static Application getApplication(){
if (mApplication == null){
try {
Method method = Class.forName("android.app.ActivityThread").getDeclaredMethod("currentApplication");
mApplication = (Application) method.invoke(null, null);
} catch (Exception e) {
e.printStackTrace();
}
}
return mApplication;
}
}
这边也想用kotlin写,但是kotlin还不熟,写了报错,如果有大佬知道如何写麻烦告知一下,谢谢
object AppGlobals {
val application: Application by lazy {
Class.forName("android.app.ActivityThread").getDeclaredMethod("currentApplication").invoke(null, null) as Application
}
}
- 使用
Toast.makeText(AppGlobals.getApplication(), response.body()?.string()?.trim() ?: "null", Toast.LENGTH_SHORT).show()