Tôi muốn kết thúc một hoạt động từ bên trong onCreate
phương pháp. Khi tôi gọi finish()
, onDestroy()
không được gọi ngay lập tức, mã vẫn tiếp tục trôi qua finish()
. onDestroy()
không được gọi cho đến sau onCreate()
dấu ngoặc nhọn đóng.
Theo onCreate()
mô tả tại developer.android.com/reference.
Bạn có thể gọi finish () từ bên trong hàm này, trong trường hợp này onDestroy () sẽ được gọi ngay lập tức mà không cần bất kỳ phần nào còn lại của vòng đời hoạt động (onStart (), onResume (), onPause (), v.v.) thực thi.
Lý do tôi hỏi là: Tôi muốn kiểm tra dữ liệu từ Gói được chuyển đến onCreate()
. Tất nhiên tôi có quyền kiểm soát những gì được chuyển đến onCreate
, nhưng tôi vẫn nghĩ rằng nó nên được kiểm tra tại điểm giao hàng.
Mã của tôi chứa lớp A
, bắt đầu Hoạt động B
. Tôi tin rằng hai thẻ cuối cùng "bên ngoài mệnh đề if", không nên được gọi vì finish
phương thức trong if
câu lệnh lẽ ra đã hủy hoạt động. Nó không liên quan gì đến mệnh đề if vì dòng thẻ sau lệnh finish()
gọi thứ hai vẫn được đọc.
Mã của tôi:
Hạng A
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// goToBButton: when pressed sends message to class B.
Button goToBButton = (Button)this.findViewById(R.id.go_to__b_btn);
goToBButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick (View v) {
Log.i(TAG,"A Class: goToBButton, onClick");
Intent i = new Intent(A.this, B.class);
startActivityForResult(i,REQ_TO_B);
}
});
} // end onCreate
Mã của tôi ClassB
public class B extends Activity{
private static final String TAG = "tag";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layoutb);
// set as true, should always print Tag: one line before first finish"
if (true) {
Log.i(TAG,"B Class: one line before 1st finish");
finish();
}
// shouldn't get here after first finish
Log.i(TAG,"B Class: outside of if clause, before second finish");
finish();
// shouldn't get here after second finish
Log.i(TAG,"B Class: outside of if clause, after finish");
} // end onCreate
@Override
public void onStart () {
super.onStart();
Log.i(TAG,"B Class: onStart");
}
@Override
public void onRestart() {
super.onRestart();
Log.i(TAG,"B Class: onRestart");
}
@Override
public void onResume () {
super.onResume();
Log.i(TAG,"B Class: onResume");
}
@Override
public void onPause () {
super.onPause();
Log.i(TAG,"B Class: onPause");
}
@Override
public void onStop () {
super.onStop();
Log.i(TAG,"B Class: onStop");
}
@Override
public void onDestroy () {
super.onDestroy();
Log.i(TAG,"B Class: onDestroy");
}
} // end B Class
Đây là kết quả của các thẻ của tôi:
11-26 15: 53: 40.456: INFO / tag (699): A Class: goToBButton, onClick
11-26 15: 53: 40.636: INFO / tag (699): A Class: onPause
11-26 15: 53: 40.865: INFO / tag (699): B Class: một dòng trước khi kết thúc đầu tiên
11-26 15: 53: 40.896: INFO / tag (699): Loại B: bên ngoài mệnh đề if, trước khi kết thúc thứ hai
11-26 15: 53: 40,917: INFO / tag (699): B Class: bên ngoài mệnh đề if, sau khi kết thúc
11-26 15: 53: 41.035: INFO / tag (699): A Class: onResume
11-26 15: 53: 41.165: INFO / tag (699): B Class: onDestroy