Nếu ứng dụng của bạn chưa được "chấm dứt", sau đó # 1 đã phải làm việc và # 2 chỉ đòi hỏi tiết kiệm bất kỳ giá trị mà không được quản lý Automagically vào Bundle trong onSaveInstanceState() sau đó khôi phục lại chúng trong onRestoreInstanceState().
Đây là loại hack, nhưng tôi nghĩ rằng lựa chọn tốt nhất của bạn cho # 1 trong trường hợp ứng dụng thực sự bị chấm dứt sẽ là lưu Hoạt động gần đây nhất trong onResume của từng lớp Hoạt động của bạn khi bạn lần đầu tiên chạy onCreate của hoạt động đầu tiên của bạn làm một kiểm tra sau đó bắt đầu hoạt động chính xác ... thậm chí có thể đặt trong một hoạt động trống lúc đầu. Một cái gì đó như thế này:
startActivity:
public class StartActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// get last open Activity
String lastActivity = PreferenceManager.getDefaultSharedPreferences(this).getString("last_activity", "");
if (last_activity == MyActivity2.getSimpleName()) {
startActivityForResult(new Intent(this, MyActivity2.class));
} else if (last_activity == MyActivity3.getSimpleName()) {
startActivityForResult(new Intent(this, MyActivity3.class));
} else {
// assume default activity
startActivityForResult(new Intent(this, MyActivity1.class));
}
}
public void onActivityResult() {
// kill the activity if they go "back" to here
finish();
}
}
Sau đó, trong tất cả các hoạt động khác (MyActivity1,2,3) lưu các giá trị như sau:
@Override
public void onResume() {
Editor e = PreferenceManager.getDefaultSharedPreferences(this).edit();
e.putString("last_activity", getClass().getSimpleName());
e.commit();
super.onResume();
}
Bạn cũng sẽ phải xử lý lưu/khôi phục dữ liệu cho từng Hoạt động theo cách thủ công. Bạn có thể lưu tất cả các giá trị bạn cần vào các tùy chọn bên trong onPause() của mỗi Activity sau đó khôi phục nó trong onResume().
Nguồn
2009-09-20 08:19:38
Cảm ơn fiXedd, tôi không nghĩ rằng đây là một hack. Nó giống như một mô hình điều phối. Tôi đã chỉ hy vọng rằng tôi đang thiếu một cái gì đó và có cách dễ dàng hơn để làm điều này. – Bostone
Làm thế nào về startActivity và sau đó chỉ cần kết thúc() thay vì startActivityForResult? –
Đồng thời chú ý đến hoạt động khởi chạyThiết lập mã trong tệp kê khai. Tôi đã đặt nó thành "singleTask" nhưng đã đổi thành "singleTop" để cho phép nó tiếp tục hoạt động chính xác cuối cùng. Tôi đã tìm thấy một lời giải thích hay tại http://www.intridea.com/blog/2011/6/16/android-understanding-activity-launchmode –