Добавление дополнительной информации в верхней части высоко оцененного ответа (добавлен дополнительный раздел KILLABLE и следующий набор методов, которые будут вызываться в жизненном цикле):
Источник: разработчик .android.com
Обратите внимание на столбец «Killable» в приведенной выше таблице - для тех методов, которые отмечены как подлежащие уничтожению , после того, как этот метод возвращает процесс, в котором эта активность может быть убита системой, в любой момент без какой-либо другой строки исполняемого кода.
Из-за этого вы должны использовать метод onPause()
для записи любого постоянные данные (например, редактирование пользователя) для хранения. Кроме того, метод onSaveInstanceState(Bundle)
вызывается перед тем, как помещать активность в такое фоновое состояние, позволяя вам сэкономить любое динамическое состояние экземпляра в вашей деятельности в заданное Bundle
, которое позднее будет получено в onCreate(Bundle)
, если действие необходимо воссоздать.
Обратите внимание, что важно сохранить постоянные данные в onPause()
вместо onSaveInstanceState(Bundle)
, поскольку последний не является частью обратных вызовов жизненного цикла, поэтому не будет вызываться в каждой ситуации, как описано в его документации.
Я хотел бы добавить еще несколько методов. Они не перечислены как методы жизненного цикла, но они будут называться во время жизненного цикла в зависимости от некоторых условий. В зависимости от вашего требования, возможно, вам придется реализовать эти методы в своем приложении для правильной обработки состояния.
onPostCreate(Bundle savedInstanceState)
Вызывается, когда запуск активности завершен (после вызова
blockquote>onStart()
иonRestoreInstanceState(Bundle)
).onPostResume()
Вызывается, когда возобновление активности завершено (после того, как был вызван
blockquote>onResume()
).onSaveInstanceState(Bundle outState)
Вызывается для извлечения состояния каждого экземпляра из активности до его убийства, состояние может быть восстановлено в
blockquote>onCreate(Bundle)
илиonRestoreInstanceState(Bundle)
(связка, заполненная этим методом, будет передана обоим).onRestoreInstanceState(Bundle savedInstanceState)
Этот метод вызывается после
blockquote>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()
вызывается, хотя он не цитируется как метод жизненного цикла.