2012-01-17 50 views
11

創建自己的Activity子類時,我們重寫了一些基本的Activity生命週期函數。重寫函數的Android活動必須調用超類。*

在其中的這些問題,我們必須電話超級實施中,在我們應該和它在哪裏唯一的好方式?方法

// base lifecycle 
onCreate(Bundle savedInstanceState); 
onStart(); 
onRestart(); 
onResume(); 
onPause(); 
onStop(); 
onDestroy(); 
finalize(); 
onUserLeaveHint(); 
// instance state 
onSaveInstanceState(Bundle outState); 
onRestoreInstanceState(Bundle savedInstanceState) 
// others 
onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo); 
onCreateOptionsMenu(Menu menu); 
onOptionsItemSelected(MenuItem item); 
onContextItemSelected(MenuItem item); 
onMenuItemSelected(int featureId, MenuItem item); 
onActivityResult(int requestCode, int resultCode, Intent data); 
onBackPressed(); 

名單不是最終的,隨意添加更多的功能,我們應該知道,該怎麼做。


對於那些誰感興趣的,在這裏應該放置super.methodName
Locations of super() calls in Android Eclipse Plugin generated code reliable?

+0

如果您忘記調用超級方法,Android會拋出RuntimeException,儘管這是必要的。 – Flo 2012-01-17 09:47:24

+0

FIRST的超類:'onRestoreInstanceState,onStop,onRestart,onStart'。 LAST的超類:'onDestroy,onPause,onSaveInstanceState,onResume'。 – 2016-09-04 15:30:02

回答

6

絕:

  • onCreate(Bundle savedInstanceState);
  • onStart();
  • onRestart();
  • onResume();
  • onPause();
  • onStop();
  • onDestroy();
  • onPostCreate(Bundle savedInstanceState);
  • onPostResume();

應該/不: (可能有助於調用父類的方法,除非你管理活動的狀態或故意改變活性的自己的行爲 - 在這樣的情況下可能有害)

  • onSaveInstanceState(Bundle savedInstanceState);
  • onRestoreInstanceState(Bundle savedInstanceState);
  • onBackPressed();
  • onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo);
  • onCreateOptionsMenu(Menu menu);
  • onOptionsItemSelected(MenuItem item);
  • onContextItemSelected(MenuItem item);
  • onMenuItemSelected(int featureId, MenuItem item);

實際上,覆蓋任何方法時,它查看重寫類的源代碼並查看該方法的功能是一種很好的做法。

+1

太棒了,至少你,回答了我的問題:)謝謝 – 2012-01-17 10:36:47

+2

你好,馬雷克) – 2012-01-17 10:40:08

+0

你能解釋一下你如何將這些方法歸類爲「必須」和「應該」嗎?我是一名初學者,我正試圖理解如何找出哪些方法應該調用super()。我不想只在需要的時候記住和回憶......我想了解如何弄清楚 – vicky96 2015-12-14 07:18:28

2

所有Activity類method.In的Java和Android如果你調用superclass方法,你必須寫下super.methodName

4

它只是一個很好的實踐來調用超級實現。

但有時它的強制性,如「onCreate()」,否則在這種情況下會有一個「ActivityInstantiateingexcepetion」。

此外,你需要一些時間來覆蓋在某些情況下,超級實現,像

onBackPressed(){
if(myFlag){
// do my stuff
}
else {
// Do usual stuff on Back pressed
super.onBackPressed();
}

所以這樣,如果你的「myFlag」將是真實的,你的東西會做別的正常onBackpressed將被執行。

+0

:我同意100% – Sameer 2012-01-17 09:50:45

+0

@TofeeqAhmad:謝謝,爲什麼你不把我的答案投在這種情況下:) – akkilis 2012-01-17 09:53:34

+0

當然:) :)。 +1 bro – Sameer 2012-01-17 09:55:05

0

所有這些方法都應該調用super。()方法,我認爲

相關問題