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

标签 android

我需要在应用程序生命周期的早期调用 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/

相关文章:

android - 在相对的 android 布局中带有单选按钮的 RadioGroup

android - 如何隐藏对话框后面的空白/黑色 Activity 窗口

android - Android 12 中的 IntentFilter 和导出组件是否有任何(记录不详的)更改?

android - 如何防止在 TabActivity 的第一个选项卡上启动 Activity ?

java - 检查编辑文本中的空值

java - Android Textview 资源未找到

android - 抱歉,此视频不适用于流式传输到android中的此设备

android - 如何在 fragment 类中绑定(bind)列表适配器

java - 当音乐应用程序通知栏中的歌曲更改时,歌曲名称和专辑封面不会更改

java - ConcurrentModificationException 修复问题