如何提供Context来调用我自己的实用程序类中的必要函数

时间:2010-11-11 20:07:17

标签: android android-intent android-activity android-context

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

2 个答案:

答案 0 :(得分:6)

  

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

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

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

答案 1 :(得分:5)

你也可以考虑扩展Application并在其onCreate - 方法中初始化你的单身作为常规对象。然后,您可以使用Application访问活动中的getApplication - 对象。 Application还提供对应用程序上下文的访问权限,因此您不必在活动中担心这一点。

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