Thêm một số thông tin vào đầu câu trả lời được đánh giá cao (Đã thêm phần bổ sung của KILLABLE và bộ phương pháp tiếp theo, sẽ được gọi trong vòng đời):
Nguồn: developer.android.com
Lưu ý "Có thể giết được " trong bảng trên - đối với các phương thức được đánh dấu là có thể hủy được, sau khi phương thức đó trả về quy trình lưu trữ, hoạt động có thể bị hệ thống giết bất cứ lúc nào mà không có dòng mã nào khác được thực thi.
Do đó, bạn nên sử dụng onPause()
phương pháp để ghi bất kỳ dữ liệu liên tục nào (chẳng hạn như chỉnh sửa của người dùng) để lưu trữ. Ngoài ra, phương thức onSaveInstanceState(Bundle)
được gọi trước khi đặt hoạt động ở trạng thái nền như vậy, cho phép bạn lưu bất kỳ trạng thái động nào trong hoạt động của bạn vào trạng thái đã cho Bundle
, để được nhận sau onCreate(Bundle)
nếu hoạt động cần được tạo lại.
Lưu ý rằng điều quan trọng là phải lưu dữ liệu liên tục onPause()
thay onSaveInstanceState(Bundle)
vì vì sau này không phải là một phần của các cuộc gọi lại vòng đời, do đó sẽ không được gọi trong mọi tình huống như được mô tả trong tài liệu của nó.
Tôi muốn thêm một vài phương pháp. Chúng không được liệt kê như các phương pháp vòng đời nhưng chúng sẽ được gọi trong suốt vòng đời tùy thuộc vào một số điều kiện. Tùy thuộc vào yêu cầu của bạn, bạn có thể phải thực hiện các phương pháp này trong ứng dụng của mình để xử lý trạng thái phù hợp.
onPostCreate(Bundle savedInstanceState)
Được gọi khi hoạt động khởi động hoàn tất (sau onStart()
và onRestoreInstanceState(Bundle)
đã được gọi).
onPostResume()
Được gọi khi hoạt động tiếp tục hoàn thành (sau khi onResume()
đã được gọi).
onSaveInstanceState(Bundle outState)
Được gọi để truy xuất trạng thái theo trường hợp từ một hoạt động trước khi bị giết để trạng thái có thể được khôi phục trong onCreate(Bundle)
hoặc onRestoreInstanceState(Bundle)
(Gói được điền bằng phương thức này sẽ được truyền cho cả hai).
onRestoreInstanceState(Bundle savedInstanceState)
Phương thức này được gọi sau onStart()
khi hoạt động đang được khởi tạo lại từ trạng thái đã lưu trước đó, được đưa ra ở đây trong savedInstanceState
.
Mã ứng dụng của tôi sử dụng tất cả các phương thức sau:
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);
}
}
Hoạt động đăng nhập:
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();
}
}
đầu ra: (Trước khi tạm dừng)
D/Ravi: Main OnCreate
D/Ravi: Main Start
D/Ravi: Main Resume
D/Ravi: Main PostResume
đầu ra: (Sau khi tiếp tục từ tạm dừng)
D/Ravi: Main ReStart
D/Ravi: Main Start
D/Ravi: Main Resume
D/Ravi: Main PostResume
Lưu ý rằng onPostResume()
được gọi ngay cả khi nó không được trích dẫn là phương pháp vòng đời.