android - 如何在我自己的实用程序类中提供上下文来调用必要的函数

标签 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 对象。现在我的解决方法是在初始化实用程序类时传递一个 Activity 引用,并使用该引用来调用这些函数。我想知道这样做的正确方法是什么。让每个类都扩展 Context 以便它可以调用这些函数是不合理的。

最佳答案

Now my workaround is to pass an activity reference while initializing the utility class and have that reference to call those functions. I'm wondering what's the correct way to do that.

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

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

关于android - 如何在我自己的实用程序类中提供上下文来调用必要的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4158785/

相关文章:

android - 延迟后 LiveData 会发生什么情况

android - 如何在 Android TextView 中连接文本?

java - 在不使用默认/内置应用程序的情况下使用 JavaMail API 在 Android 中发送电子邮件

java - 此 Activity 已经有一个由 Android Studio 上的窗口装饰错误提供的操作栏

java - 将数据从一项 Activity 解析到另一项 Activity

java - 启动 Activity 后调用方法

Android:如何以编程方式取消 SearchView 的焦点

android - 工具栏将状态栏推开

java - 将文件从内部存储复制到外部存储

java - 使用 Assets 从android中的文件中读取