有时候我需要提供一个Context对象来调用特定的函数,比如
Intent intent = new Intent(context, MyClass.class);
以启动服务
context.startService(intent);
或者,提供一个Context对象来进行查询
Cursor cursor = context.managedQuery(uri, projection, null, null, null);
如果这是在扩展Activity的UI类中完成的,那很好。 但是,如果我想创建自己的实用程序类(单例),它不扩展任何东西并调用这些函数,我没有必要的Context对象。现在我的解决方法是在初始化实用程序类时传递一个活动引用,并具有调用这些函数的引用。我想知道这样做的正确方法是什么。让每个类扩展Context以使它可以调用这些函数是不合理的。
答案 0 :(得分:6)
现在我的解决方法是在初始化实用程序类时传递活动引用,并具有调用这些函数的引用。我想知道这样做的正确方法是什么。
绝对不是。您通过持有静态引用来泄漏该活动的内存。
让实用程序类中的方法将Context
作为参数。或者,使用getApplicationContext()
获取单例应用程序上下文并将其提供给实用程序类构造函数。只要进程执行,应用程序上下文对象就会存在。
答案 1 :(得分:5)
你也可以考虑扩展Application
并在其onCreate
- 方法中初始化你的单身作为常规对象。然后,您可以使用Application
访问活动中的getApplication
- 对象。 Application
还提供对应用程序上下文的访问权限,因此您不必在活动中担心这一点。
这样,您的所有共享应用程序状态都集中在一个地方,您不必使用静态初始化程序。