扩展应用程序

时间:2010-09-23 15:00:36

标签: android extend android-context

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

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

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

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

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

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

最后,任何链接到一些示例源以显示扩展应用程序的不同内容是有用的。

2 个答案:

答案 0 :(得分:7)

据我所知,在Android开发中传递上下文并不是特例。好吧,无论是那个,还是我做错了。

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

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

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

另请查看this answer

答案 1 :(得分:1)

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

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

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

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