การเพิ่มข้อมูลเพิ่มเติมที่ด้านบนของคำตอบที่ได้รับคะแนนสูง (เพิ่มส่วนเพิ่มเติมของ 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)
(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()
มีการเรียกใช้แม้ว่าจะไม่ได้ยกมาเป็นวิธีวงจรชีวิต