我如何获得应用程序上下文:
private static OBDApplication mInstance;
public static OBDApplication getInstance () {
return mInstance;
}
@Override
public void onCreate () {
super.onCreate();
mInstance = this;
}
我知道应用程序上下文无法在任何地方使用,例如Dialog
和startActivity
。我知道,当活动被破坏时,我应该总是让活动Conetxt的参考完成。但我注意到,Toast
和SharedPreferences
可以使用应用程序上下文,它似乎非常无辜,不会导致内存泄漏。
那我该怎么办?如果上面的问题不存在,那么事情可能很酷:
public static void toast ( @StringRes int resID){
Toast.makeText(OBDApplication.getInstance().getApplicationContext(), resID, Toast.LENGTH_SHORT).show();
}
但我知道最简单的方法,所以我花了一些时间去搜索,但我得到了一些相反的意见。
有人说:“使用应用程序上下文不好,导致活动破坏,此活动的吐司也应该释放,但如果你使用应用程序上下文,这意味着它的生命和应用程序一样长。所以是有点浪费“。
然而,有人说:“使用应用程序上下文很好,因为在这种情况下,你总是使用相同的对象,同一个toast,这意味着它不会一次又一次地产生新的toast”
答案 0 :(得分:1)
是的,你肯定可以将应用程序上下文用于show toast和sharedprefrence,因为它们都可以在不与活动交互的情况下使用。
简单的例子就像服务一样,你可以使用服务和服务都没有任何活动参考,但它工作正常..
答案 1 :(得分:0)
即使在
中也可以使用Application Context
Throught Application
Activity
和Service
表示您可以在所有Android组件中使用。
还显示Toast
条消息,SharedPreferences
,Catering DataBase
对象,LayoutInflater
。
应用程序 - 是在您的应用程序中运行的单例实例 处理。它可以通过getApplication()等方法访问 活动或服务,以及来自任何其他对象的getApplicationContext() 继承自Context。无论它在哪里或如何 访问过,您将始终从您的内容中收到相同的实例 过程
答案 2 :(得分:0)
据我所知,Toast和共享首选项没有应用程序的父视图,它将接受所有应用程序上下文,并且不会要求您的应用程序的应用程序上下文。即使您的应用程序未处于活动状态,它也能正常工作。
然而,在我们的应用程序中,我们可能会创建一些只在我们的应用程序上下文中运行的视图。当你将它保存在静态中并尝试在特定上下文不存在时使用时,它将通过异常。
因此,保存边框是,我们不应该在任何地方保存应用程序上下文的实例。您应该使用来自活动的片段getActivity()
中的this
从您的应用程序中获取它。