2009-09-20 34 views
9

Tôi có 3 Hoạt động khác nhau mà người dùng điều hướng giữa không theo thứ tự cụ thể. Mục tiêu của tôi nó gồm hai phần:Android - khôi phục hoạt động được xem lần cuối

  1. Khi người dùng chuyển sang cái gì khác khi ứng dụng được mở lại tôi muốn bắt đầu từ đâu người dùng rời ngay cả khi ứng dụng đã được chấm dứt
  2. Khi hoạt động cuối cùng thi đấu trở lại tôi muốn khôi phục nó vào xem cuối cùng nhà nước (cái này tôi nghĩ rằng tôi có một ý tưởng khá tốt về cách để đạt được)

tôi nghĩ vấn đề không phải là sTART/STOP - nơi tôi khá nhiều có được những gì tôi cần, nhưng onCreate() nếu ứng dụng đã được chấm dứt . Trong trường hợp đó - nó chọn Hoạt động mà tôi đã định cấu hình trong tệp kê khai. Tôi cho rằng tôi có thể đặt một cái gì đó trong phương pháp onCreate() của hoạt động mặc định đó nhưng có cách nào tốt hơn mà tôi có thể bị thiếu?

Trả lời

6

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().

+0

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

+0

Làm thế nào về startActivity và sau đó chỉ cần kết thúc() thay vì startActivityForResult? –

+0

Đồ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 –

0

Tôi tin rằng bạn muốn triển khai onSaveInstanceState và điều đó sẽ lưu trữ trạng thái hiện tại của hoạt động của bạn trong một nhóm. Gói đó sẽ được chuyển vào hoạt động của bạn trong onCreate và bạn có thể sử dụng nó để đặt lại các giá trị của mình.

http://developer.android.com/guide/topics/fundamentals.html#actstate

+0

Điều đó chủ yếu là cho # 2 như tôi hiểu. Tôi cần chọn người dùng hoạt động đang xem cuối cùng. Sau đó, tôi có thể khôi phục lại trạng thái của nó – Bostone

1

Hãy nhớ rằng onSaveInstanceState() không hoạt động được đối với trạng thái dài hạn, tức là người dùng tắt điện thoại và sau đó bật lại sau một thời điểm không xác định. Bạn sẽ cần phải tạo ra cơ chế nhà nước dài hạn của riêng bạn nếu bạn muốn cho nhà nước của bạn để tồn tại chu kỳ điện.

Các vấn đề liên quan