2012-01-17 29 views
11

Khi tạo phân lớp Hoạt động của riêng, chúng tôi sẽ ghi đè một số chức năng vòng đời Activity cơ bản.Hoạt động Android có chức năng ghi đè phải gọi là siêu. *

Trong đó những chúng phải gọi siêu thực, nơi chúng tôi nên và ở đâu là nó chỉ cách tốt?

// 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(); 

Danh sách các phương pháp không phải là cuối cùng, vui lòng thêm các chức năng khác, nơi chúng tôi cần biết, phải làm gì.


Đối với những người quan tâm, nơi nên super.methodName đặt
Locations of super() calls in Android Eclipse Plugin generated code reliable?

+0

Android sẽ ném RuntimeException nếu bạn quên gọi phương thức siêu mặc dù nó sẽ là cần thiết. – Flo

+0

Siêu lớp tại FIRST: 'onRestoreInstanceState ، onStop, onRestart, onStart'. Siêu lớp tại LAST: 'onDestroy, onPause, onSaveInstanceState, onResume'. –

Trả lời

6

phải:

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

nên/không nên: (có thể hữu ích để gọi phương thức lớp cha, trừ khi bạn quản lý nhà nước hoạt động hoặc cố tình thay đổi hành vi hoạt động của mình - trong đó trường hợp có thể có hại)

  • 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);

Trên thực tế, khi trọng bất kỳ phương pháp, nó thực hành tốt để xem mã nguồn của lớp bị ghi đè và xem chính xác phương thức này là gì.

+1

tuyệt vời, ít nhất bạn, đã trả lời câu hỏi của tôi :) Cảm ơn –

+2

chào mừng bạn, Marek) –

+0

bạn vui lòng giải thích cách bạn phân loại các phương pháp này thành "phải" và "phải" không? Tôi là người mới bắt đầu và tôi đang cố gắng tìm hiểu xem phương pháp nào nên có một cuộc gọi đến siêu(). Tôi không muốn chỉ nhớ và nhớ lại khi cần thiết ... Tôi muốn hiểu làm thế nào để tìm ra nó – vicky96

2

của nó tất cả Activity lớp method.In Java và Android nếu bạn gọi superclass phương pháp, Bạn phải viết super.methodName

4

Chỉ là một thực hành tốt để gọi thực hiện siêu.

NHƯNG một số lần bắt buộc, như trong "onCreate()", nếu không thì sẽ có "ActivityInstantiateingexcepetion" trong trường hợp này.

Ngoài ra, một số lần bạn muốn ghi đè thi siêu trong một số trường hợp, như

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

Vì vậy, cách này nếu "myFlag" của bạn sẽ thành sự thật, công cụ của bạn sẽ được thực hiện khác thường onBackpressed sẽ được thực thi.

+0

: tôi đồng ý 100% – Sameer

+0

@TofeeqAhmad: cảm ơn, tại sao bạn không bỏ phiếu cho câu trả lời của tôi trong trường hợp này :) – akkilis

+0

chắc chắn :) :). +1 bro – Sameer

0

tất cả các phương pháp này nên gọi là siêu.() phương pháp tôi nghĩ

Các vấn đề liên quan