Hinzufügen einiger weiterer Informationen zu der hoch bewerteten Antwort (Hinzufügen eines zusätzlichen Abschnitts über KILLABLE und der nächsten Gruppe von Methoden, die im Lebenszyklus aufgerufen werden):
Fuente: entwickler.android.de
![enter image description here]()
Beachten Sie die " Tötbar "Spalte in der obigen Tabelle - für die Methoden, die als beendbar markiert sind, kann der Prozess, der die Aktivität beherbergt, nach der Rückkehr der Methode jederzeit vom System beendet werden, ohne dass eine weitere Zeile seines Codes ausgeführt wird.
Aus diesem Grund sollten Sie die onPause()
Methode, um dauerhafte Daten (z. B. Benutzeränderungen) in den Speicher zu schreiben. Darüber hinaus kann die Methode onSaveInstanceState(Bundle)
wird aufgerufen, bevor die Aktivität in einen solchen Hintergrundzustand versetzt wird, so dass Sie jeden dynamischen Instanzzustand in Ihrer Aktivität in der angegebenen Bundle
und wird später in onCreate(Bundle)
wenn die Aktivität neu erstellt werden muss.
Beachten Sie, dass es wichtig ist, die persistenten Daten in onPause()
anstelle von onSaveInstanceState(Bundle)
weil letztere nicht Teil der Lebenszyklus-Callbacks ist und daher nicht in jeder Situation, wie in der Dokumentation beschrieben, aufgerufen wird.
Ich möchte noch einige weitere Methoden hinzufügen. Diese sind nicht als Lebenszyklusmethoden aufgeführt, werden aber während des Lebenszyklus in Abhängigkeit von bestimmten Bedingungen aufgerufen. Je nach Ihren Anforderungen müssen Sie diese Methoden möglicherweise in Ihrer Anwendung implementieren, um den Status ordnungsgemäß zu handhaben.
onPostCreate(Bundle savedInstanceState)
Wird aufgerufen, wenn der Start der Aktivität abgeschlossen ist (nach onStart()
y onRestoreInstanceState(Bundle)
aufgerufen wurden).
onPostResume()
Wird aufgerufen, wenn die Wiederaufnahme der Aktivität abgeschlossen ist (nach onResume()
aufgerufen wurde).
onSaveInstanceState(Bundle outState)
Wird aufgerufen, um den Zustand pro Instanz von einer Aktivität abzurufen, bevor sie beendet wird, damit der Zustand in onCreate(Bundle)
ou onRestoreInstanceState(Bundle)
(das von dieser Methode befüllte Bundle wird an beide übergeben).
onRestoreInstanceState(Bundle savedInstanceState)
Diese Methode wird aufgerufen, nachdem onStart()
wenn die Aktivität von einem zuvor gespeicherten Zustand aus neu initialisiert wird, hier angegeben in savedInstanceState
.
Mein Anwendungscode verwendet alle diese Methoden:
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private EditText txtUserName;
private EditText txtPassword;
Button loginButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("Ravi","Main OnCreate");
txtUserName=(EditText) findViewById(R.id.username);
txtPassword=(EditText) findViewById(R.id.password);
loginButton = (Button) findViewById(R.id.login);
loginButton.setOnClickListener(this);
}
@Override
public void onClick(View view) {
Log.d("Ravi", "Login processing initiated");
Intent intent = new Intent(this,LoginActivity.class);
Bundle bundle = new Bundle();
bundle.putString("userName",txtUserName.getText().toString());
bundle.putString("password",txtPassword.getText().toString());
intent.putExtras(bundle);
startActivityForResult(intent,1);
// IntentFilter
}
public void onActivityResult(int requestCode, int resultCode, Intent resIntent){
Log.d("Ravi back result:", "start");
String result = resIntent.getStringExtra("result");
Log.d("Ravi back result:", result);
TextView txtView = (TextView)findViewById(R.id.txtView);
txtView.setText(result);
Intent sendIntent = new Intent();
//sendIntent.setPackage("com.whatsapp");
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "Message...");
sendIntent.setType("text/plain");
startActivity(sendIntent);
}
@Override
protected void onStart() {
super.onStart();
Log.d("Ravi","Main Start");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d("Ravi","Main ReStart");
}
@Override
protected void onPause() {
super.onPause();
Log.d("Ravi","Main Pause");
}
@Override
protected void onResume() {
super.onResume();
Log.d("Ravi","Main Resume");
}
@Override
protected void onStop() {
super.onStop();
Log.d("Ravi","Main Stop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("Ravi","Main OnDestroy");
}
@Override
public void onPostCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onPostCreate(savedInstanceState, persistentState);
Log.d("Ravi","Main onPostCreate");
}
@Override
protected void onPostResume() {
super.onPostResume();
Log.d("Ravi","Main PostResume");
}
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
}
}
Login-Aktivität:
public class LoginActivity extends AppCompatActivity {
private TextView txtView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
txtView = (TextView) findViewById(R.id.Result);
Log.d("Ravi","Login OnCreate");
Bundle bundle = getIntent().getExtras();
txtView.setText(bundle.getString("userName")+":"+bundle.getString("password"));
//Intent intent = new Intent(this,MainActivity.class);
Intent intent = new Intent();
intent.putExtra("result","Success");
setResult(1,intent);
// finish();
}
}
Ausgabe: ( Vor der Pause)
D/Ravi: Main OnCreate
D/Ravi: Main Start
D/Ravi: Main Resume
D/Ravi: Main PostResume
Ausgabe: ( Nach Wiederaufnahme aus der Pause)
D/Ravi: Main ReStart
D/Ravi: Main Start
D/Ravi: Main Resume
D/Ravi: Main PostResume
Beachten Sie, dass onPostResume()
aufgerufen wird, obwohl sie nicht als Lebenszyklusmethode angegeben ist.
21 Stimmen
Warum wurde diese Frage so oft hochgestuft? Warum wurde sie nicht geschlossen?
62 Stimmen
Warum wird eine Frage mit vielen positiven Bewertungen geschlossen? Stackoverflow hat eine schlechte Angewohnheit, das zu tun.
15 Stimmen
Dies ist eine Frage im Wiki-Stil, und ich denke, sie sollte auf der Website erlaubt sein.
4 Stimmen
@Alexander Kulyakhtin - Warum sollte man diese Frage schließen? Stattdessen sollten Sie Ihr Konto schließen, wenn Sie die Informationen nicht verdauen können, die in den Antworten für neue Android-Benutzer bereitgestellt werden. Diese Frage ist voll von Wissen und ich werde diese Frage hochstufen.
0 Stimmen
Denn wann werden diese Methoden in Frage gestellt, was haben Sie ausprobiert?
0 Stimmen
Kommentar: Warum ist diese Frage so oft hochgestuft worden? Ich: fährt fort mit Upvote