Android getApplicationContext在TabActivity中返回null

Android getApplicationContext在TabActivity中返回null,android,tabactivity,Android,Tabactivity,我有一个选项卡活动,如上所示。它在初次运行时运行良好。在后台一段时间后,它的活动将从内存中删除,当你重新打开应用程序时,它将崩溃。原因是getApplicationContext()返回null 我在其他活动中使用相同的设置,没有问题。我在文档中找不到说明何时/为什么/是否返回null的任何地方。您可以简单地将“this”传递给您的DataManager.getInstance,因为您的MyTabActivity继承自上下文(三级以上)为什么不改用this呢?@userSeven7s,因为我需要

我有一个选项卡活动,如上所示。它在初次运行时运行良好。在后台一段时间后,它的活动将从内存中删除,当你重新打开应用程序时,它将崩溃。原因是getApplicationContext()返回null


我在其他活动中使用相同的设置,没有问题。我在文档中找不到说明何时/为什么/是否返回null的任何地方。

您可以简单地将“this”传递给您的DataManager.getInstance,因为您的MyTabActivity继承自上下文(三级以上)

为什么不改用
this
呢?@userSeven7s,因为我需要应用程序上下文,不是活动的上下文。请尝试
this.getApplicationContext()
…如果直接调用onCreate,则getApplicationContext可以为null。onCreate是如何调用的?由框架还是由您?@userSeven7s,就编译器而言,这与我拥有的完全相同。但我需要应用程序的上下文,这样它才能持久。您可以在此处了解差异:@mouser58907:您不需要它来“持久化”任何内容-一旦您的
TabActivity
被销毁,您的
dataManager
变量将不再有效。在
TabActivity
dataManager
对象的生命周期内,您只需要一个“当前”有效的
上下文。在这种情况下,请使用
this
,因为您的
dataManager
对象仅在
onCreate(…)
方法中创建,并且在
TabActivity
被销毁时不再相关。@mouser58907,MisterSquonk刚刚为我回答:)@MisterSquonk我的数据管理器是一个注册广播接收器的单体。因此,它确实需要应用程序上下文。这是此处所述的推荐实现:@mouser58907:是的,很抱歉我在发布后意识到了这一点,但没有机会回来。在我看来,最好由扩展
应用程序的类来维护
数据管理器
对象。您尚未解释您的
广播接收器的功能,但如果需要监视系统意图,例如,只需在清单中的相关
中注册它即可。
public class MyTabActivity extends TabActivity {
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    dataManager = DataManager.getInstance(getApplicationContext());
  }
}