使用静态应用程序上下文

时间:2015-07-08 21:35:49

标签: android

我遇到了在屏幕旋转期间返回处理程序的问题,这意味着尚未创建活动并导致错误。

我通过这篇文章解决了这个问题:Static way to get 'Context' on Android?

设置要使用的应用程序级静态上下文。我想知道这是多么安全,如果有任何我不应该使用它的情况,因为我不完全理解它。

谢谢,

凯文。

4 个答案:

答案 0 :(得分:2)

不,这是解决问题的可怕方法。这意味着您正在使用Application上下文而不是您的Activity上下文,这通常是错误的并且可能导致内存泄漏。执行此操作的正确方法是在ding任何可能导致此错误的事件之前检查此情况,或者捕获导致的任何异常并将其吃掉。

真正解决这个问题的最好方法就是关闭轮换活动,这一直是谷歌愚蠢的愚蠢想法。

答案 1 :(得分:1)

这样做有多安全?

将Application上下文的实例保持为单例是完全安全的,理解为通过访问此实例不会收到NPE是安全的。应用程序对象本身就是一个单例,每个应用程序只有一个。即使应用程序被系统杀死,Application对象的onCreate()也是第一个调用,因此您将始终获得对Application上下文的引用。

我可以将它用于所有内容吗?

当然,不。应用程序上下文是资源管理的合适上下文,例如访问字符串值,获取数据库实例等。但它不是Android View框架的一个好目标,它需要一个Activity上下文。因此,当没有与其使用相关的视图时,您可以始终使用它。例如,LayoutInflater如果将其传递给应用程序上下文,则会产生错误。

我建议尽可能使用Activity上下文,但在某些情况下,传递活动上下文不是一个选项,例如,如果您在启动应用程序时创建数据库实例。

旋转活动娱乐怎么样?

每个Android开发人员都会告诉您管理此方案是完全的地狱,最好将您的活动锁定在垂直方向或避免重新创建活动。除了在所有品牌和设备上都没有一致的方法,谷歌工程师的许多帖子主张反对这样做,因为它可能会产生严重的内存泄漏和布局问题。 Here您有更多信息。

答案 2 :(得分:0)

如果使用应用程序上下文,则无法执行某些操作,例如对布局进行充气 - 如果将应用程序上下文传递给LayoutInflater,则会出现异常。

答案 3 :(得分:0)

尝试使用Loader。在视图准备就绪之前,结果不会被推送到视图。