2015-09-21 129 views
1

我需要在應用程序生命週期的早期調用getPackageName。我試圖在Application的構造函數中調用它來看它拋出的是NullPointerException。我看了一下Android源代碼,發現that Android調用內部方法attach,這個方法又調用記錄的保護attachBaseContext方法。一旦我將我的代碼從構造函數移動到attachBaseContext之後,一切都按預期工作。在應用程序生命週期的早期調用getPackageName()

問題:這是好主意,承擔attachBaseContext方法作爲一種起延伸至Application構造?

回答

1

如果您只需要pacakageName我建議使用BuildConfig#APPLICATION_ID,因爲它是靜態變量,不需要等待應用程序初始化。軟件包名稱和應用程序ID之間的差異,您可以找到here

如果你反正需要一些進入點應用,恕我直言,這似乎是一個好主意,用attachBaseContext(Context c)的方法,因爲:

  • 它可能只調用一次(如構造函數)。
  • 它是應用程序中第一個可以獲得應用程序上下文的地方
相關問題