Chciałbym zakończyć działanie od wewnątrz metody onCreate
. Gdy zadzwonię pod numer finish()
, onDestroy()
nie jest natychmiast wywoływany, kod nadal przepływa obok finish()
. onDestroy()
nie jest wywoływana przed zamknięciem klamrowym onCreate()
.onUtwórz przepływ kontynuuje po zakończeniu()
Według opisu na stronie onCreate()
na stronie developer.android.com/reference.
Można zadzwonić wykończenie() od wewnątrz tej funkcji, w tym przypadku onDestroy() zostanie natychmiast wezwał bez reszty cyklu działalności (onStart(), onResume(), OnPause() itp.).
Powód, o który pytam, to: Chciałbym sprawdzić dane z Pakietu przekazanego do onCreate()
. Oczywiście mam kontrolę nad tym, co jest przekazywane do onCreate
, ale nadal uważam, że należy to sprawdzić w punkcie dostawy.
Mój kod zawiera klasę A
, która rozpoczyna działanie B
. Sądzę, że dwa ostatnie znaczniki "poza klauzulą" nie powinny być wywoływane, ponieważ metoda finish
w oświadczeniu powinna zniszczyć działanie. Nie ma to nic wspólnego z klauzulą if, ponieważ linia znaczników po drugim wywołaniu finish()
jest nadal czytana.
mój kod:
Klasa 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
mojego kodu 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
Oto wyniki moich tagów:
11-26 15:53 : 40.456: INFO/tag (699): A Klasa: goToBButton, onClick
26/11 15: 53: 40,636: info/zakładka (699): klasa: OnPause
11-26 15: 53: 40,865: info/zakładka (699): B klasy: jedna linia przed 1-ta końca
26/11 15: 53: 40.896: info/zakładka (699): klasa B: poza jeśli klauzulą, przed drugim końca
26/11 15: 53: 40,917: informacji/znacznik (699): Klasa B: poza klauzulą if, po zakończeniu
11-26 15: 53: 41.035: INFO/tag (699): A Klasa: onResume
11-26 15: 53: 41,165: INFO/tag (699): B Klasa: onDestroy
"Natychmiast" był bardzo kiepskim wyborem słów w dokumentach ... – Karu