2010-01-09 26 views
6

Chúng tôi đang thiết kế một ứng dụng Android có một số hoạt động đang hoạt động trong thuật sĩ như cách - người dùng phải chuyển từ hoạt động # 1 sang hoạt động # 5 để đến hoạt động cuối cùng (# 6).Các phương pháp hay nhất trên Android để giữ dữ liệu giữa các hoạt động tử vong/khởi động lại cho toàn bộ phiên ứng dụng là gì?

Vì chúng tôi biết một hoạt động có thể đột nhiên bị hệ điều hành chấm dứt do bộ nhớ thấp, chúng tôi sử dụng lớp Ứng dụng làm bộ nhớ tĩnh để giữ dữ liệu người dùng nhập vào các hoạt động "wizard" và dữ liệu khác mà ứng dụng của chúng tôi cần cho toàn bộ phiên.

Thật không may, chúng tôi đã phát hiện ra cách tiếp cận này không thành công - có vẻ như phiên bản Ứng dụng cũng có thể bị hệ điều hành giết (điều này được phát hiện cụ thể trên Android 1.6 so với 1.5). Mong đợi của chúng tôi có sai về cách tiếp cận này không (chúng tôi nghĩ rằng cá thể lớp Ứng dụng luôn luôn tồn tại trong toàn bộ phiên ứng dụng)?

Vì vậy, câu hỏi là - thực tiễn tốt nhất trên Android để giữ dữ liệu giữa các hoạt động chết/khởi động lại cho toàn bộ phiên ứng dụng là gì?

Trả lời

9

Chúng tôi đang thiết kế một ứng dụng Android có một số hoạt động mà là làm việc trong một thuật sĩ như cách - dùng nên chuyển từ hoạt động này # 1 tới hoạt động # 5 để có được các hoạt động chính thức (# 6).

Bạn có chắc chắn bạn nên triển khai chúng dưới dạng hoạt động riêng biệt không? Tại sao không phải là một hoạt động đơn lẻ, sử dụng ViewFlipper hoặc một thứ gì đó để di chuyển giữa các trạng thái thuật sĩ?

Are sự mong đợi của chúng tôi sai về cách tiếp cận này (chúng tôi nghĩ rằng lớp Application dụ luôn sống cho toàn bộ phiên ứng dụng)?

Ví dụ về Lớp ứng dụng luôn hoạt động cho toàn bộ phiên ứng dụng, AFAIK. Một khi tất cả các hoạt động của bạn bị phá hủy, tuy nhiên, Ứng dụng cũng sẽ bị phá hủy.

Vậy câu hỏi được - những gì là thực hành tốt nhất trên Android để giữ cho dữ liệu giữa các hoạt động deathes/khởi động lại cho phiên ứng dụng toàn bộ?

  1. Sử dụng một Service - nếu điều này bị đuổi ra khỏi RAM, chỉ cần bắt đầu lại từ đầu
  2. Sử dụng một cơ sở dữ liệu
  3. Sử dụng một file

Hoặc, tốt nhất: don' t sử dụng nhiều hoạt động trong trường hợp này. Một thuật sĩ là một điều logic duy nhất; đối xử với nó như vậy và biến nó thành một hoạt động đơn lẻ. Kéo dài trạng thái của bạn qua onSaveInstanceState() và bạn đã đặt.

+2

Tôi thực sự thích câu trả lời này. Nó có thể được sạch hơn để thực hiện điều này như là một hoạt động, tuy nhiên bạn phải xem xét các tình huống như nút Back mà sẽ không đưa bạn đến "màn hình" trước đó theo mặc định. Chỉ cần giả định quy trình của bạn (và do đó các đối tượng khung bên trong nó như Ứng dụng) có thể bị giết bất cứ lúc nào. Sử dụng Dịch vụ có thể hữu ích, nhưng điều đó có thể chỉ đơn giản là trì hoãn việc không thể tránh khỏi. Câu hỏi thường gặp này có thể hữu ích: http://developer.android.com/guide/appendix/faq/framework.html#3 – James

0

Nếu dữ liệu mà người dùng nhập vào và bạn cần lưu trữ chỉ là một tập hợp các nguyên thủy, bạn có thể chỉ cần sử dụng SharedPreferences làm bộ nhớ liên tục.

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