2010-09-23 132 views
0

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

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

例如,假设我创建一个名为myObject的类(在它自己的Java文件):

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

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

另外,为了确保我很清楚,MyApplication(以及其中的变量)是否会贯穿整个应用程序的生命周期,或者不是?无论哪种方式都很好。如果需要的话,我只想确保我解释清楚。

最后,任何指向某些示例源的链接,以显示扩展应用程序有什么不同的东西,将不胜感激。

回答

7

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

我不知道,如果你需要这个回答与否,而是从上下文,你可以访问Application对象是这样的:

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

MyApplication类应该生活在整个应用程序生命周期,是。

也检查出this answer

+1

谢谢你的回应。我在IntentService(我可以访问应用程序的上下文)中完成大部分的重要工作,其他大部分对我的全局数据的调用将来自Activities;所以我觉得我会没事的。任何其他地方(如我的OP示例中),我只能传递数据。 – Andrew 2010-09-23 15:46:44

+0

我试图在一个不是活动的类中获取对MyApplication对象的引用,所以我无法使用典型的(MyApplication)this.getApplication()。这是您的建议帮助很大的地方,我刚刚通过了上下文并获得了MyApplication的参考,谢谢TON! – Soham 2011-10-23 16:46:52

1

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

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

如果无法访问上下文,则无法获取应用程序对象。如果您只需要对应用程序进行引用,只需传递应用程序对象,就可以最大限度地减少可能出现的错误,从而节省对不在屏幕上的活动的引用,并通过此引用泄漏整个活动。

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

+1

只是关于传递getApplicationContext()的说明。不要用它来启动打开网页的意图 - 它会抛出异常。 :) – benvd 2010-09-23 19:50:23