Nhiều câu trả lời và ghi chú khác nhau cho rằng finish () có thể bỏ qua onPause () và onStop () và trực tiếp thực thi onDestroy (). Công bằng mà nói, tài liệu Android về điều này ( http://developer.android.com/reference/android/app/Activity.html ) lưu ý "Hoạt động đang hoàn thiện hoặc bị hệ thống phá hủy" khá mơ hồ nhưng có thể gợi ý rằng finish () có thể nhảy tới onDestroy ().
JavaDoc on finish () cũng gây thất vọng tương tự ( http://developer.android.com/reference/android/app/Activity.html#finish () ) và không thực sự lưu ý phương thức nào được gọi để hoàn thành ().
Vì vậy, tôi đã viết ứng dụng nhỏ này bên dưới để ghi lại từng trạng thái khi nhập cảnh. Nó bao gồm một nút gọi kết thúc () - vì vậy bạn có thể thấy nhật ký của các phương thức được kích hoạt. Thử nghiệm này sẽ gợi ý rằng finish () thực sự cũng gọi onPause () và onStop (). Đây là đầu ra tôi nhận được:
2170-2170/? D/LIFECYCLE_DEMO﹕ INSIDE: onCreate
2170-2170/? D/LIFECYCLE_DEMO﹕ INSIDE: onStart
2170-2170/? D/LIFECYCLE_DEMO﹕ INSIDE: onResume
2170-2170/? D/LIFECYCLE_DEMO﹕ User just clicked button to initiate finish()
2170-2170/? D/LIFECYCLE_DEMO﹕ INSIDE: onPause
2170-2170/? D/LIFECYCLE_DEMO﹕ INSIDE: onStop
2170-2170/? D/LIFECYCLE_DEMO﹕ INSIDE: onDestroy
package com.mvvg.apps.lifecycle;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;
public class AndroidLifecycle extends Activity {
private static final String TAG = "LIFECYCLE_DEMO";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "INSIDE: onCreate");
setContentView(R.layout.activity_main);
LinearLayout layout = (LinearLayout) findViewById(R.id.myId);
Button button = new Button(this);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(AndroidLifecycle.this, "Initiating finish()",
Toast.LENGTH_SHORT).show();
Log.d(TAG, "User just clicked button to initiate finish()");
finish();
}
});
layout.addView(button);
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "INSIDE: onStart");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "INSIDE: onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "INSIDE: onDestroy");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "INSIDE: onPause");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "INSIDE: onResume");
}
}