2012-03-04 31 views
18

Khi hoạt động được tạo lần đầu tiên, hệ thống gọi phương thức OnContentChanged() làm phương thức đầu tiên và cuộc gọi cuối cùng theo hệ thống là phương pháp OnDetachedFromWindow() khi hoạt động bị giết. toàn bộ thời gian tồn tại của Hoạt động diễn ra giữa OnCreate()OnDestroy(). Tại sao? Xin hãy giúp tôi hiểu sự khác biệt giữa các phương pháp này.Phương thức hoạt động: onCreate() và onDestroy()

Code:

import android.app.Activity; 
import android.content.res.Configuration; 
import android.os.Bundle; 
import android.widget.Toast; 

public class ActivitylifecycleActivity extends Activity { 
    /** Called when the activity is first created. */ 

    @Override 
    public void onContentChanged() { 
     super.onContentChanged(); 
     Toast.makeText(getApplicationContext(),"1. onContentChanged()", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Toast.makeText(getApplicationContext(),"2. onCreate()", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     Toast.makeText(getApplicationContext(),"3. onStart()", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onRestoreInstanceState(Bundle restoreInstanceState) { 
     Toast.makeText(getApplicationContext(),"4. onRestoreinstaneState()", Toast.LENGTH_SHORT).show(); 
     super.onRestoreInstanceState(restoreInstanceState); 
    } 

    @Override 
    public void onRestart() { 
     super.onRestart(); 
     Toast.makeText(getApplicationContext(),"5. onRestart()", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    protected void onPostCreate(Bundle onpostcrete) { 
     super.onPostCreate(onpostcrete); 
     Toast.makeText(getApplicationContext(),"6. onPostCreate()", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     Toast.makeText(getApplicationContext(),"7. onResume()", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    protected void onPostResume() { 
     super.onPostResume(); 
     Toast.makeText(getApplicationContext(),"8. onPostResume()", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onAttachedToWindow() { 
     super.onAttachedToWindow(); 
     Toast.makeText(getApplicationContext(),"9. onAttachedToWindow()", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onWindowFocusChanged(boolean bo) { 
     super.onWindowFocusChanged(true); 
     Toast.makeText(getApplicationContext(),"10. onWindowFocusChanged()", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onUserLeaveHint() { 
     super.onUserLeaveHint(); 
     Toast.makeText(getApplicationContext(),"11. onUserLeaveHint()", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onUserInteraction() { 
     super.onUserInteraction(); 
     ii=0; 
     Toast.makeText(getApplicationContext(),"12. onUserInteraction()", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onSaveInstanceState(Bundle savedInstanceState) { 
     super.onSaveInstanceState(savedInstanceState); 
     Toast.makeText(getApplicationContext(),"13. onSaveInstanceState()", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     Toast.makeText(getApplicationContext(),"14. onPause()", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     Toast.makeText(getApplicationContext(),"15. onStop()", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     Toast.makeText(getApplicationContext(),"16. onDestroy()", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onDetachedFromWindow() { 
     super.onDetachedFromWindow(); 
     Toast.makeText(getApplicationContext(),"17. onDetachedFromWindow()", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     Toast.makeText(getApplicationContext(),"18. onConfigurationChanged()", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public boolean onSearchRequested() { 
     super.onSearchRequested(); 
     Toast.makeText(getApplicationContext(),"19. onSearchRequested()", Toast.LENGTH_SHORT).show(); 
     return false; 
    } 
} 

Trong mã này, onContentChanged() được gọi trước khi onCreate() phương pháp và onDetachedFromWindow() được gọi sau khi onDestroy(). Tại sao?

Trả lời

20

onCreate():

Khi một hoạt động bắt đầu cuộc sống của nó onCreate() được gọi. Nó được gọi chỉ một lần trong vòng đời của một hoạt động.

onDestroy():

onDestroy() được gọi khi một hoạt động kết thúc vòng đời của nó. Nó cũng được gọi một lần trong vòng đời của một hoạt động.

onContentChanged():

móc này được gọi là bất cứ khi nào xem nội dung của những thay đổi màn hình (do một cuộc gọi đến Window.setContentView hoặc Window.addContentView). Ví dụ: bạn thêm chế độ xem mới vào hoạt động hoặc muốn làm mới danh sách bằng cách gọi notifyDataSetChanged().

onDetachedFromWindow():

Được gọi khi cửa sổ chính liên quan đến hoạt động này đã được tách ra từ người quản lý cửa sổ. Ví dụ, nó được gọi khi Activity hiện tại đi vào nền hoặc một hoạt động khác đi trước hoạt động hiện tại.

+0

nhưng 'onContentChanged()' và 'onDetachedFromWindow()' cả hai phương thức được gọi một lần trong vòng đời trong một hoạt động. khi một hoạt động mới được tạo ra, hệ thống gọi phương thức 'onContentChanged()' trước 'onCreate()' và khi một Activity sẽ hủy System Call 'onDetachedFromWindow()' làm phương thức cuối cùng. –

+0

onContentChanged() được gọi là bất cứ khi nào thay đổi nội dung cửa sổ. Khi thay đổi nội dung cửa sổ trên hoạt động bắt đầu do đó nó được gọi. Nhưng nếu thay đổi nội dung cửa sổ trong khi thực thi hoạt động trênContentChanged sẽ được gọi lại nhiều lần bất cứ khi nào thay đổi nội dung. Tương tự như trường hợp của cửa sổ onDetachedFrom, nó được gọi khi khung nhìn hoạt động không hiển thị rõ ràng hơn ví dụ khi cửa sổ bị phá hủy hoặc một hoạt động khác xuất hiện trong nền trước. Phương thức này có thể được gọi nhiều lần. –

+0

mã này 'onContentChanged()' được gọi là perior to 'onCreate()' –

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