我需要在应用程序生命周期的早期调用getPackageName
。我试图在Application
构造函数中调用它,只是为了看到它抛出NullPointerException
。我查看了Android源代码,发现that Android调用内部attach
方法,后者又调用记录的受保护attachBaseContext
方法。一旦我将代码从构造函数移动到attachBaseContext
,一切都按预期工作。
问题:假设attachBaseContext
方法是Application
构造函数的一种扩展,这是个好主意吗?
答案 0 :(得分:1)
如果您只需要 pacakageName ,我建议使用BuildConfig#APPLICATION_ID
,因为它是静态变量,并且不需要等待应用程序初始化。您可以找到包名称和应用程序ID之间的差异here。
如果您还需要一些应用程序的入口点,恕我直言,使用attachBaseContext(Context c)
方法似乎是个好主意,因为: