3

有时我需要提供一个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 以便它可以调用这些函数是不合理的。

4

2 回答 2

8

现在我的解决方法是在初始化实用程序类时传递一个活动引用,并让该引用调用这些函数。我想知道这样做的正确方法是什么。

绝对不。您通过持有对该活动的静态引用来泄漏该活动的内存。

让实用程序类上的方法将 aContext作为参数。或者,用于getApplicationContext()获取单例应用程序上下文并将其提供给您的实用程序类构造函数。只要进程存在,应用程序上下文对象就会存在。

于 2010-11-11T20:13:37.077 回答
5

您也可以考虑将-MethodApplication中的单例扩展和初始化onCreate为常规对象。然后,您可以使用 访问Application活动中的 -Object getApplicationApplication还提供对应用程序上下文的访问,因此您不必在活动中担心这一点。

这样一来,您所有共享的应用程序状态都集中在一个地方,您不必乱用静态初始化程序。

于 2010-11-11T20:21:40.433 回答