各種答案和筆記聲稱finish()可以跳過onPause()和onStop()並直接執行onDestroy()。公平地說,Android文檔(http://developer.android.com/reference/android/app/Activity.html)記錄了「活動正在完成或被系統銷燬」,這很不明確,但可能表明finish()可以跳轉到onDestroy()。
完成()上的JavaDoc同樣令人失望(http://developer.android.com/reference/android/app/Activity.html#finish()),實際上並沒有注意到響應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");
}
}
so finish()method只觸發onDestroy()的調用,就是這樣? –
是的,它觸發onDestroy()將破壞活動的概念活動是生命週期 –
所以在完成後(),這個活動中的所有變量將被銷燬,對吧?當我再次回到這個活動時,它們將被重新宣佈或初始化,對吧? –