2012-05-10 26 views
5

Tôi đang làm việc trên một ứng dụng có một vài Hoạt động. Một hoạt động sẽ bắt đầu hoạt động tiếp theo. Để chia sẻ một số Giá trị tôi đang sử dụng triển khai Ứng dụng tùy chỉnh (tôi đang nói về android.app.Application) được gọi là Ứng dụng của tôi.
Như chúng ta đều biết, hệ thống Android sẽ giết chết một ứng dụng, nếu nó cần thêm dung lượng. Nhưng điều này dẫn đến một vấn đề:
Ngữ cảnh ứng dụng bị giết nhưng hoạt động không

  • tôi mở ứng dụng của tôi và sử dụng nó giống như bất kỳ ứng dụng khác
  • tôi đóng nó (nút Home) và sử dụng các ứng dụng khác
  • Hệ thống sẽ giết ứng dụng của tôi vì nó lãng phí bộ nhớ
  • Khi tôi mở lại ứng dụng của tôi, nó muốn để mở hoạt động cuối cùng tôi sử dụng và tôi nhận được một lực lượng chặt chẽ, vì các giá trị trong MyApplication là null

điều kỳ lạ là, rằng destr hệ thống oys ứng dụng của tôi, nhưng nó có vẻ như nó giữ các hoạt động. Tôi không thực sự hiểu tại sao điều này là như vậy bởi vì các ứng dụng dường như không có một vòng đời.

Điều tôi muốn có:
Khi MyApplication (toàn bộ Ứng dụng, không chỉ hoạt động) bị giết, tôi cũng muốn các hoạt động cuối cùng bị giết. Vì vậy, khi tôi mở lại ứng dụng, nó bắt đầu các trọng lực chính được cung cấp bởi manifest.xml.
hoặc
Các giá trị trong MyApplication được duy trì và không bị mất nếu Ứng dụng bị hủy. (Tôi đang nói về một vài đối tượng vì vậy tôi nghĩ rằng các sở thích được chia sẻ sẽ không hoạt động).
Tôi không muốn sử dụng dịch vụ để ràng buộc hoạt động của mình, nhưng có cách tương tự để nói với hệ thống rằng hoạt động được sử dụng cuối cùng của tôi phụ thuộc vào ngữ cảnh ứng dụng không?

Tôi hy vọng bạn hiểu vấn đề của tôi là gì và ai đó có thể giúp tôi với điều này.

+0

tôi thích như thế nào không ai trong số các câu trả lời dường như đề cập đến việc bạn sử dụng Ứng dụng tùy chỉnh ngay cả khi bạn lưu ý rõ ràng việc sử dụng nó: /). Bạn đã thử sử dụng Ứng dụng.ActivityLifecycleCallbacks ở tất cả, không chắc chắn nếu đó là những gì bạn đang cố gắng để thực hiện ngay cả (có vẻ như bạn có thể cần các directio đảo ngược). – MikeIsrael

+0

tôi nghĩ bạn đang đề cập đến ** Lịch sử ngăn xếp hoạt động **, nghi thức? – waqaslam

+0

Cảm ơn MikeIsrael bạn đã đúng. Các câu trả lời dưới đây không đề cập đến vấn đề của tôi. Sử dụng Vòng đời hoạt động chỉ là một cách giải quyết. Tôi muốn nếu ứng dụng có thể xử lý các hoạt động của nó và giết chúng nếu toàn bộ ứng dụng bị giết. Lịch sử ngăn xếp hoạt động thay vì xử lý hoạt động của nút Backbutton hơn là vấn đề của tôi. Tôi thực sự chắc chắn đây là một vấn đề về Ứng dụng, không phải là Vấn đề Hoạt động. – joshplusa

Trả lời

1

Cách đúng để thực hiện công việc là lưu trạng thái đơn đăng ký của bạn. Ghi đè phương thức onSaveInstanceState (Bundle savedInstanceState) để lưu trạng thái của bạn và onRestoreInstanceState để truy xuất nó.

Nếu bạn cần phải lưu bộ lớn dữ liệu xem xét sử dụng một cơ sở dữ liệu SQL

+0

Cảm ơn Tipp nhưng như tôi đã viết trong bài viết của tôi, điều này không làm việc cho tôi. Theo như tôi đã hiểu, tôi không thể lưu đối tượng của riêng mình trong trạng thái ứng dụng. – joshplusa

+0

Sau đó, dự đoán tốt nhất của tôi là sử dụng cơ sở dữ liệu SQL để lưu các đối tượng của bạn – Ika

+0

Được rồi. Tôi sẽ xem xét kỹ hơn cách tốt nhất để giải quyết vấn đề của tôi là gì. Cảm ơn bạn vì sự giúp đỡ! – joshplusa

0

Bạn nên chắc chắn rằng các ứng dụng đóng và khởi động lại theo cách bạn muốn nó trong onPause(), onResume()onStop() phương pháp. Kiểm tra savedInstanceState có thể lưu trạng thái của ứng dụng (và khôi phục lại nó, khi nó được gửi như một tham số để onCreate)

+0

Cảm ơn nhưng tôi nói về Ứng dụng không hoạt động. – joshplusa

+0

@joshplusa Bạn đang nói về cả hai, và bạn muốn hoạt động chính được bắt đầu khi tiếp tục sau onStops(), phải không? – keyser

+0

Có. Hiện tại, tôi đang kiểm tra các giá trị của mình trong onResume(). Nếu họ là null tôi hoàn thành ứng dụng. Bằng cách này, tôi sẽ đến hoạt động chính bất cứ lúc nào. Nhưng đó là loại bẩn. Có lẽ tôi phải xem xét kỹ hơn Lịch sử ngăn xếp hoạt động. Cảm ơn bạn đã phản hồi! – joshplusa

0

Thực hiện tùy chỉnh của bạn trong ứng dụng, thêm một Cờ nói:

public boolean appContextExist = false; 

On của bạn Hoạt động đầu tiên đặt cờ là true,

Override onCreate và phương pháp trên hoạt động của bạn mà cần bối cảnh onResume, thêm sau:

MyApplication myApp = ((MyApplication) getApplicationContext()); 
if (!myApp.appContextExist) { 
    // Code to return to start activity here 
} 
Các vấn đề liên quan