在应用程序生命周期的早期调用getPackageName()

时间:2015-09-21 10:27:46

标签: android

我需要在应用程序生命周期的早期调用getPackageName。我试图在Application构造函数中调用它,只是为了看到它抛出NullPointerException。我查看了Android源代码,发现that Android调用内部attach方法,后者又调用记录的受保护attachBaseContext方法。一旦我将代码从构造函数移动到attachBaseContext,一切都按预期工作。

问题:假设attachBaseContext方法是Application构造函数的一种扩展,这是个好主意吗?

1 个答案:

答案 0 :(得分:1)

如果您只需要 pacakageName ,我建议使用BuildConfig#APPLICATION_ID,因为它是静态变量,并且不需要等待应用程序初始化。您可以找到包名称和应用程序ID之间的差异here

如果您还需要一些应用程序的入口点,恕我直言,使用attachBaseContext(Context c)方法似乎是个好主意,因为:

  • 它可能只被调用一次(作为构造函数)。
  • 这是应用程序中您可以获得应用程序上下文的第一个地方