我需要在应用程序生命周期的早期调用 getPackageName
。我试图在 Application
构造函数中调用它,结果发现它抛出了 NullPointerException
。我查看了 Android 源代码并找到了 that Android 调用内部attach
方法,该方法又调用受记录 保护的attachBaseContext
方法。一旦我将我的代码从构造函数移到 attachBaseContext
中,一切都按预期工作。
问题:假设attachBaseContext
方法是对Application
构造函数的一种扩展是个好主意吗?
最佳答案
如果您只需要pacakageName,我建议使用BuildConfig#APPLICATION_ID
,因为它是静态变量,不需要等待应用程序初始化。您可以找到包名称和应用程序 ID 之间的区别 here .
如果您无论如何都需要应用程序的一些入口点,恕我直言,使用 attachBaseContext(Context c)
方法似乎是个好主意,因为:
- 它可能只被调用一次(作为构造函数)。
- 这是应用程序中第一个可以获取应用程序上下文的地方
关于android - 在应用程序生命周期的早期调用 getPackageName(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32692915/