Додавання додаткової інформації зверху до високо оціненої відповіді (Додано додатковий розділ KILLABLE та наступний набір методів, які будуть викликані у життєвому циклі):
Джерело: developer.android.com
Зверніть увагу на " Killable стовпчик " у наведеній вище таблиці - для тих методів, які позначені як порушені, після цього методу повернення процесу, що розміщує активність, може бути вбита системою в будь-який час, не виконуючи інший рядок її коду.
Через це ви повинні використовувати onPause()
метод для запису будь-яких постійних даних (наприклад, правки користувачів) у сховище. Крім того, метод onSaveInstanceState(Bundle)
викликається перед тим, як розмістити активність у такому фоновому стані, що дозволяє зберегти будь-який динамічний стан екземпляра у вашій діяльності у заданий Bundle
, щоб пізніше було отримано, onCreate(Bundle)
якщо діяльність потрібно буде знову створити.
Зауважте, що важливо зберігати постійні дані onPause()
замість того, onSaveInstanceState(Bundle)
що останні не є частиною зворотного виклику життєвого циклу, тому він не буде викликаний у будь-якій ситуації, як описано в його документації.
Я хотів би додати ще кілька методів. Вони не перераховані як методи життєвого циклу, але вони будуть називатися протягом життєвого циклу залежно від деяких умов. Залежно від вашої вимоги, вам, можливо, доведеться реалізувати ці методи у вашій заявці для правильного поводження з державою.
onPostCreate(Bundle savedInstanceState)
Викликається після завершення запуску активності (після onStart()
та виклику onRestoreInstanceState(Bundle)
).
onPostResume()
Викликається, коли відновлення діяльності завершено (після того, onResume()
як було викликано).
onSaveInstanceState(Bundle outState)
Викликається отримати стан екземпляра з активності перед вбивством, щоб стан можна було відновити в onCreate(Bundle)
або onRestoreInstanceState(Bundle)
(Пакет, заселений цим методом, буде передано обом).
onRestoreInstanceState(Bundle savedInstanceState)
Цей метод викликається після onStart()
повторної ініціалізації діяльності із раніше збереженого стану, наведеного тут у savedInstanceState
.
Мій код програми, використовуючи всі ці методи:
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);
}
}
Активність входу:
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();
}
}
вихід: (перед паузою)
D/Ravi: Main OnCreate
D/Ravi: Main Start
D/Ravi: Main Resume
D/Ravi: Main PostResume
вихід: (Після відновлення після паузи)
D/Ravi: Main ReStart
D/Ravi: Main Start
D/Ravi: Main Resume
D/Ravi: Main PostResume
Зауважте, що onPostResume()
викликається, навіть якщо він не цитується як метод життєвого циклу.