Menambahkan beberapa info lebih lanjut di atas jawaban berperingkat tinggi (Menambahkan bagian tambahan KILLABLE dan serangkaian metode berikutnya, yang akan dipanggil dalam siklus hidup):
Sumber: developer.android.com
Perhatikan kolom "Dapat Dibunuh " pada tabel di atas - untuk metode yang ditandai sebagai dapat dimatikan, setelah metode itu mengembalikan proses yang menjadi hosting, aktivitas tersebut dapat dimatikan oleh sistem kapan saja tanpa ada baris kode yang dieksekusi.
Karena itu, Anda harus menggunakan onPause()
metode ini untuk menulis data persisten (seperti suntingan pengguna) ke penyimpanan. Selain itu, metode onSaveInstanceState(Bundle)
ini dipanggil sebelum menempatkan aktivitas dalam keadaan latar belakang seperti itu, yang memungkinkan Anda untuk menyimpan keadaan instance dinamis apa pun dalam aktivitas Anda ke dalam yang diberikan Bundle
, untuk kemudian diterima onCreate(Bundle)
jika aktivitas perlu dibuat kembali.
Perhatikan bahwa penting untuk menyimpan data persisten onPause()
alih-alih onSaveInstanceState(Bundle)
karena yang terakhir bukan bagian dari daur ulang siklus hidup, jadi tidak akan dipanggil dalam setiap situasi seperti yang dijelaskan dalam dokumentasinya.
Saya ingin menambahkan beberapa metode lagi. Ini tidak terdaftar sebagai metode siklus hidup tetapi mereka akan dipanggil selama siklus hidup tergantung pada beberapa kondisi. Tergantung pada kebutuhan Anda, Anda mungkin harus menerapkan metode ini dalam aplikasi Anda untuk penanganan negara yang tepat.
onPostCreate(Bundle savedInstanceState)
Disebut ketika aktivitas start-up selesai (setelah onStart()
dan onRestoreInstanceState(Bundle)
telah dipanggil).
onPostResume()
Disebut ketika aktivitas melanjutkan selesai (setelah onResume()
dipanggil).
onSaveInstanceState(Bundle outState)
Dipanggil untuk mengambil status per instance dari suatu aktivitas sebelum dibunuh sehingga status tersebut dapat dipulihkan dalam onCreate(Bundle)
atau onRestoreInstanceState(Bundle)
(Bundel yang dihuni oleh metode ini akan diteruskan ke keduanya).
onRestoreInstanceState(Bundle savedInstanceState)
Metode ini dipanggil setelah onStart()
ketika aktivitas sedang diinisialisasi ulang dari keadaan yang sebelumnya disimpan, diberikan di sini di savedInstanceState
.
Kode aplikasi saya menggunakan semua metode ini:
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);
}
}
Aktivitas Masuk:
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();
}
}
output: (Sebelum jeda)
D/Ravi: Main OnCreate
D/Ravi: Main Start
D/Ravi: Main Resume
D/Ravi: Main PostResume
output: (Setelah melanjutkan dari jeda)
D/Ravi: Main ReStart
D/Ravi: Main Start
D/Ravi: Main Resume
D/Ravi: Main PostResume
Catatan yang onPostResume()
dipanggil meskipun itu tidak dikutip sebagai metode siklus hidup.