2014-12-20 12 views

Trả lời

14

Nếu bạn thử mã dưới đây, bạn sẽ tìm thấy một trường hợp trong đó onDestroy() thực sự được gọi trong khi onPause()onStop() Sao lưu cuộc gọi chu kỳ cuộc gọi được Bỏ qua.

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     finish(); 
    } 

    @Override 
    protected void onDestroy() { 
     // TODO Auto-generated method stub 
     super.onDestroy(); 
     Log.e("MainActivity", "onDestroy"); 
    } 

    @Override 
    protected void onPause() { 
     // TODO Auto-generated method stub 
     super.onPause(); 
     Log.e("MainActivity", "onPause"); 

    } 

    @Override 
    protected void onStop() { 
     // TODO Auto-generated method stub 
     super.onStop(); 
     Log.e("MainActivity", "onStop"); 

    } 

Do đó, nếu bạn gọi finish(), một lần Hoạt động được tạo ra, hệ thống sẽ gọi onDestroy() trực tiếp.

+1

Có một scenerio nơi onPause được gọi là một lần trước khi onStop(), và trong một sợi công nhân không được dừng lại, kết thúc() được gọi trong đó sẽ bỏ qua onPause() và nhận onDestroy() được gọi là. –

1

này có thể khi chúng ta gọi là kết thúc() trực tiếp trong một hoạt động. Khi kết thúc() được gọi trong một hoạt động, onDestroy() được thực thi và nó thực hiện những việc sau:

  1. Loại bỏ bất kỳ hộp thoại nào hoạt động được quản lý.
  2. Đóng mọi con trỏ mà hoạt động đang quản lý.
  3. Đóng bất kỳ tìm kiếm mở hộp thoại
3

này xảy ra khi chúng ta gọi là phương pháp kết thúc để hoạt động Ví dụ: bên cuộc gọi hoạt động của bạn this.finish();

3

onPause() và onStop() sẽ không được áp dụng nếu finish() được gọi từ trong phương thức onCreate(). Điều này có thể xảy ra, ví dụ, nếu bạn phát hiện lỗi trong kết quả onCreate() và kết thúc cuộc gọi(). Trong trường hợp này, tuy nhiên, bất kỳ dọn dẹp bạn dự kiến ​​sẽ được thực hiện trong onPause() và onStop() sẽ không được thực thi.

Mặc dù onDestroy() là lần gọi lại cuối cùng trong vòng đời của hoạt động , điều đáng nói là cuộc gọi lại này không phải lúc nào cũng được gọi là được gọi và không nên dựa vào để tiêu diệt tài nguyên. Có những tình huống mà hệ thống sẽ đơn giản giết quá trình lưu trữ của hoạt động mà không gọi phương thức này (hoặc bất kỳ phương thức nào khác), vì vậy, không nên sử dụng để thực hiện những việc được giữ nguyên ở khoảng sau khi quá trình này biến mất. nó là tốt hơn có các nguồn lực tạo ra trong onStart() và onResume(), và đã họ bị phá hủy trong onStop() và onPause, tương ứng.

refrence - https://www.toptal.com/android/interview-questions

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