Tôi muốn kết thúc hoạt động từ bên trong phương thức onCreate
. Khi tôi gọi finish()
, onDestroy()
không được gọi ngay lập tức, mã sẽ tiếp tục chảy qua finish()
. onDestroy()
không được gọi cho đến sau cú đúp đóng onCreate()
.onTạo dòng chảy tiếp tục sau khi kết thúc()
Mỗi mô tả onCreate()
tại developer.android.com/reference.
Bạn có thể gọi kết thúc() từ bên trong chức năng này, trong trường hợp onDestroy (mà) sẽ được ngay lập tức gọi mà không cần bất kỳ phần còn lại của vòng đời hoạt động (onStart(), onResume(), onPause() , vv) thực hiện.
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 thờ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ẻ "bên ngoài của điều khoản" cuối cùng, không nên được gọi vì phương pháp finish
trong tuyên bố if
nên đã phá hủy hoạt động. Nó không có gì để làm với mệnh đề if vì dòng thẻ sau khi cuộc gọi thứ hai finish()
vẫn còn đọc.
Mã của tôi:
Class 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
My Mã 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): Lớp: goToBButton, onClick
11-26 15: 53: 40,636: INFO/thẻ (699): Một Class: onPause
11-26 15: 53: 40,865: INFO/thẻ (699): B Class: một dòng trước 1 kết thúc
11-26 15: 53: 40,896: INFO/thẻ (699): B class: bên ngoài của mệnh đề if, trước thứ hai kết thúc
11-26 15: 53: 40,917: INFO/thẻ (699): Loại B: ngoài mệnh đề if, sau khi kết thúc
11-26 15: 53: 41.035: INFO/tag (699): Lớp: onResume
11-26 15: 53: 41,165: INFO/thẻ (699): B Class: onDestroy
"ngay lập tức" là một lựa chọn từ rất nghèo trong tài liệu ... – Karu