0

我想在我的 Android 应用程序中扩展应用程序。我这样做是为了创建一个名为 MyApplication 的扩展应用程序对象并将其添加到清单中。

我现在想添加一些 getter 和 setter 来保存一些信息。看起来我需要将应用程序上下文传递给任何不包含上下文的类。

例如,假设我创建了一个名为 MyObject 的类(在它自己的 java 文件中):

public class MyObject {
  public void doStuff() {
    // do stuff
  }
}

如何从 doStuff() 访问 MyApplication?看起来我需要将应用程序上下文传递给 MyObject。这是典型的吗?有没有泄漏的可能?

另外,为了确保我清楚,MyApplication(和其中的变量)是否会在应用程序的整个生命周期中存在?无论哪种方式都很好。如果需要,我只是想确保我考虑到这一点。

最后,任何指向一些示例源的链接,以显示扩展应用程序有哪些不同的用途,我们将不胜感激。

4

2 回答 2

7

据我所知,传递上下文在 Android 开发中并不例外。好吧,要么那个,要么我做错了。

我不确定您是否需要回答这个问题,但是从上下文中,您可以Application像这样访问对象:

((MyApplication) context.getApplicationContext()).getMyGlobalVariable();

您的MyApplication课程应该贯穿整个应用程序生命周期,是的。

另请查看此答案

于 2010-09-23T15:14:32.177 回答
1

只要您传递正确的上下文,在 Android 中传递上下文就可以了。避免将活动作为上下文传递。改为使用getApplicationContext()

您的 Applicationobject 和与之关联的所有数据将在您的应用程序的整个生命周期中持续存在。即使应用程序处于后台并且所有活动都从内存中清除,因为它们不再显示。什么时候从内存中清除应用程序对象并没有很好的记录,但我认为如果您的应用程序在后台并且内存很少,则操作系统可能会破坏您的整个应用程序,因此也会从内存中删除应用程序对象。

如果您无法访问上下文,则无法获取应用程序对象。如果您只需要对应用程序的引用,只需传递应用程序对象,这将最大限度地减少因保存对不再显示在屏幕上的活动的引用并通过此引用泄漏整个活动而可能出现的错误。

我没有任何示例代码,但我用它来保存对某些任务的引用。这使我能够允许用户非常快速地在活动之间进行更改,而无需让她等待任务返回,即使下一个活动必须根据当前正在运行的任务更改某些状态。

于 2010-09-23T15:52:44.007 回答