保留应用程序上下文并将其用于Toast和SharedPreferences是否安全?

时间:2017-03-06 06:48:39

标签: android applicationcontext

  1. 我如何获得应用程序上下文:

    private static OBDApplication mInstance;
    
    public static OBDApplication getInstance () {
        return mInstance;
    }
    @Override
    public void onCreate () {
        super.onCreate();
        mInstance = this;
    }
    
  2. 我知道应用程序上下文无法在任何地方使用,例如DialogstartActivity。我知道,当活动被破坏时,我应该总是让活动Conetxt的参考完成。但我注意到,ToastSharedPreferences可以使用应用程序上下文,它似乎非常无辜,不会导致内存泄漏。

  3. 那我该怎么办?如果上面的问题不存在,那么事情可能很酷:

    public static void toast ( @StringRes int resID){
        Toast.makeText(OBDApplication.getInstance().getApplicationContext(), resID, Toast.LENGTH_SHORT).show();
    }
    
  4. 但我知道最简单的方法,所以我花了一些时间去搜索,但我得到了一些相反的意见。

    有人说:“使用应用程序上下文不好,导致活动破坏,此活动的吐司也应该释放,但如果你使用应用程序上下文,这意味着它的生命和应用程序一样长。所以是有点浪费“

    然而,有人说:“使用应用程序上下文很好,因为在这种情况下,你总是使用相同的对象,同一个toast,这意味着它不会一次又一次地产生新的toast”

3 个答案:

答案 0 :(得分:1)

是的,你肯定可以将应用程序上下文用于show toast和sharedprefrence,因为它们都可以在不与活动交互的情况下使用。

简单的例子就像服务一样,你可以使用服务和服务都没有任何活动参考,但它工作正常..

答案 1 :(得分:0)

即使在

中也可以使用Application Context Throught Application

ActivityService表示您可以在所有Android组件中使用。

还显示Toast条消息,SharedPreferences,Catering DataBase对象,LayoutInflater

  

应用程序 - 是在您的应用程序中运行的单例实例   处理。它可以通过getApplication()等方法访问   活动或服务,以及来自任何其他对象的getApplicationContext()   继承自Context。无论它在哪里或如何   访问过,您将始终从您的内容中收到相同的实例   过程

答案 2 :(得分:0)

据我所知,Toast和共享首选项没有应用程序的父视图,它将接受所有应用程序上下文,并且不会要求您的应用程序的应用程序上下文。即使您的应用程序未处于活动状态,它也能正常工作。

然而,在我们的应用程序中,我们可能会创建一些只在我们的应用程序上下文中运行的视图。当你将它保存在静态中并尝试在特定上下文不存在时使用时,它将通过异常。

因此,保存边框是,我们不应该在任何地方保存应用程序上下文的实例。您应该使用来自活动的片段getActivity()中的this从您的应用程序中获取它。