다양한 답변과 메모에 따르면 finish ()는 onPause () 및 onStop ()을 건너 뛰고 onDestroy ()를 직접 실행할 수 있다고 주장합니다. 공평하게 말하면, 이것에 대한 Android 문서 ( http://developer.android.com/reference/android/app/Activity.html )는 "활동이 시스템에 의해 마무리되거나 파괴되고 있습니다"라고 지적하지만 상당히 모호하지만 finish ()는 onDestroy ()로 이동할 수 있습니다.
finish ()의 JavaDoc은 비슷하게 실망스럽고 ( http://developer.android.com/reference/android/app/Activity.html#finish () ) 실제로 종료에 대한 응답으로 어떤 메소드가 호출되는지 기록하지 않습니다. ().
그래서이 미니 응용 프로그램을 아래에 작성하여 진입시 각 상태를 기록합니다. finish ()를 호출하는 버튼이 포함되어있어 어떤 메소드의 로그가 실행되는지 확인할 수 있습니다. 이 실험은 finish () 가 실제로 onPause () 및 onStop ()을 호출 한다고 제안했습니다 . 내가 얻는 결과는 다음과 같습니다.
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");
}
}