2012-04-30 42 views
6

Tôi muốn biết khi nào ứng dụng bị đóng, vì tôi cần xóa Cơ sở dữ liệu khi người dùng tắt ứng dụng, chỉ trong thời điểm người dùng đóng ứng dụng là đúng thời điểm để xóa SQLite Cơ sở dữ liệu, làm thế nào tôi có thể phát hiện điều này?phát hiện khi ứng dụng được đóng

+2

** Đọc tài liệu: ** http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle –

+3

Vâng, tôi biết điều này, nhưng câu hỏi là, tôi cần biết khi nào tổng số đơn đăng ký bị đóng, không khi nào một hoạt động được đóng lại. – JLouis

+0

Điều bạn muốn là không thể. Quá trình của bạn có thể bị chấm dứt bất kỳ lúc nào, bởi người dùng hoặc hệ điều hành và bạn không được thông báo về điều này. – CommonsWare

Trả lời

7

Giả sử bạn không finish() hoạt động chính của bạn, xóa cơ sở dữ liệu bên trong phương thức onDestroy() của hoạt động đó có thể là gần nhất với những gì bạn muốn thực hiện. Như đã được chỉ ra trong các ý kiến, tham khảo http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle.

+0

onDestroy() dường như không hoạt động ở lần nào, android chỉ bỏ qua thực hiện phương thức onDestry(). – San

+2

Sử dụng 'onPause()' được khuyến khích, vì 'onDestroy()' thực hiện không đáng tin cậy 100% (nó dựa trên tài nguyên hệ thống) –

15

Đây là một ý tưởng thiết kế sai lầm, phản ánh sự hiểu lầm của hệ thống - khi quá trình tổng thể chết, nó đã chết, có nghĩa là mã của bạn không còn chạy nữa.

Bạn có thể thực hiện theo dõi và thực hiện hoạt động dọn dẹp lần cuối, nhưng đừng cho rằng nó sẽ luôn thực sự xảy ra (phương pháp không phải là luôn gọi là). Nếu có một bản sao cũ là một vấn đề, hãy làm sạch nó trong lần chạy tiếp theo.

Điều đó nói rằng, bạn có thể thử sử dụng ndk để cung cấp một trình xử lý cho các tín hiệu chấm dứt quá trình, nhưng tôi vẫn không tính vào nó hoạt động trong mọi trường hợp. Tiềm năng hạn chế để đạt được bất kỳ chức năng âm thanh nào từ điều này có lẽ sẽ không biện minh cho nỗ lực trừ khi bạn đã quen thuộc với các khái niệm liên quan.

Và đừng để lỗi trong một phút làm sạch cơ chế bảo mật vì tệp ở đó trong khi ứng dụng của bạn đang chạy và sẽ vẫn còn nếu ứng dụng của bạn bị chấm dứt theo cách bất ngờ.

+0

"Nếu có một bản sao cũ là một vấn đề, hãy làm sạch nó trong lần chạy tiếp theo." - cảm ơn, đề xuất tốt – Nactus

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