2011-06-25 49 views
10

調用super.onStop()時正確的方式是什麼,即取消註冊偵聽器?取消註冊偵聽器時調用super.onStop()的正確方法

我看到:

protected void onStop() { 
    sensorManager.unregisterListener(this); 
    super.onStop(); 
} 

OR

protected void onStop() { 
    super.onStop(); 
    sensorManager.unregisterListener(this); 
} 
+0

我總是被告知'super'應該被稱爲overrode方法的第一件事(你打算超級!)在實踐中,我不認爲它真的很重要,而且更多的是「乾淨的代碼」做事的方式。 – Eric

回答

9

你應該總是首先調用它,主要是作爲一種保護機制:如果出現異常,則超實例方法將已經被調用。

4

沒關係。除非你依賴某個狀態繼續初始化(並且就任何框架類而言,我可以保證你不是),你可以在超類之後自由地調用它。如果超類拋出一個異常,你的整個應用程序將會崩潰,所以沒有理由以這種方式訂購一種或另一種方式。

也就是說,爲了保持一致性,將這些調用放在第一行是很好的,因爲那是人們希望看到它們的地方,這有助於避免您在將來犯錯誤,例如刪除代碼並意外刪除打電話給超級班。

2

從我讀到的方法中可以看出,它們是組件銷燬(onPause(),onStop(),onDestroy()等)的一部分,你應該首先做好你的工作並鏈接到超類作爲最後一件事。這樣,如果Android清理了你的工作所依賴的某些東西,那麼你將首先完成你的工作。

相關問題