簡體   English   中英

安卓 可以在onCreate()生命周期方法之外初始化對象嗎?

[英]Android. It's okay to init objects outside of onCreate() lifecycle method?

我的項目中有一些公用事業和工人。 所有這些類都作為單例工作。 假設我有多個使用此對象的活動,但兩者之間有區別

private LocationWorker mLocationWorker;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_daily_forecast);
    mLocationWorker = LocationWorker.getInstance();

和這個?

LocationWorker mLocationWorker = LocationWorker.getInstance()

可以在onCreate()方法之前獲取對此對象的引用嗎?

可以在onCreate()方法之前獲取對此對象的引用嗎?

是的。

LocationWorker mLocationWorker = LocationWorker.getInstance();

應該工作正常。

但是,由於它是一個單例,因此我不確定在字段中保存對其的引用是否有很多意義。 你可以做

LocationWorker.getInstance()

隨時隨地。

我通常更喜歡第一種方法

private LocationWorker mLocationWorker;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_daily_forecast);
    mLocationWorker = LocationWorker.getInstance();

因為僅在需要時才創建對象。 在第二種方法中,您將創建一個單例對象。 該對象甚至在需要它之前就占用內存。 我更喜歡第一種方法的一些情況是:

  • 如果將在活動的不同部分使用相同的對象。 因此,您不希望每次使用null之前都要檢查null並要求使用干凈的代碼,並希望使用更干凈的代碼。
  • 如果該類只有一個公共對象,則不會一直更改。 通常,您將其設為靜態。 很好的例子是:String LOG_TAG = MyActivity.class.getSimpleName();
  • 該對象是否將在您的活動中頻繁使用。 例如,對於進行頻繁與服務器通信的活動,您應該創建以這種方式進行通信的類的對象。 額外的例子是

如果對象將在類的某些部分中使用,則應考慮在該類中聲明它。

只要LocationWorker.getInstance(); 是一個單例對象,我們應該很好。 在類級別聲明的變量不依賴於這些方法。 就像任何其他Java類一樣,變量的范圍對於整個類(從OnStart到OnDestroy)都是可用的。 可以使用onResume()或onStart()方法重置這些變量。

活動生命周期如下: 在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM