Tôi cần ứng dụng Android của mình để lưu trạng thái của nó vào đĩa khi hoạt động của nó được đặt ở chế độ nền hoặc bị giết. Nó đã được gợi ý rằng tôi bắt đầu một thread khi onPause() được gọi và thực hiện bất kỳ thủ tục I/O đắt tiền ở đó (xem Saving/loading document state quickly and robustly for image editor).Android xử lý các chuỗi nền khi rời khỏi Hoạt động như thế nào?
Trong trường hợp nào hệ điều hành sẽ xóa chuỗi và tần suất xảy ra các tình huống này?
Tôi giả định nó sẽ giống như cách hoạt động được xử lý nơi hệ điều hành có thể tùy ý quyết định hủy chuỗi nhưng chủ yếu sẽ chỉ làm điều này khi tài nguyên bị giới hạn. Nó sẽ là tốt đẹp để tìm một số tài liệu cụ thể của điều này mặc dù.
Từ khi phát xung quanh, với một số mã thử nghiệm, một chuỗi nền bắt đầu trong onPause() sẽ chạy vô thời hạn ở chế độ nền trên thiết bị của tôi (tôi đã thử tải rất nhiều ứng dụng và không thể làm cho nó bị giết).
Đối với ứng dụng cụ thể của mình, tôi đang viết trình chỉnh sửa bitmap nơi tôi đang sử dụng mẫu Command và mẫu Memento để cho phép hoàn tác và làm lại các chỉnh sửa. Tôi muốn người dùng có thể hoàn tác/làm lại các chỉnh sửa của họ, ví dụ: người dùng nhận cuộc gọi điện thoại và hoạt động bị giết khi được đặt ở chế độ nền. Giải pháp tốt nhất tôi có thể nghĩ là sử dụng chuỗi nền để liên tục lưu lệnh và vật lưu trữ vào đĩa trong khi sử dụng ứng dụng và kết thúc lưu bất kỳ đối tượng nào còn lại trong chuỗi nền nếu onPause được gọi. Trong trường hợp xấu hơn, nếu thread bị giết tôi sẽ chỉ mất một số chỉnh sửa.
Chỉ cần làm rõ, nếu bạn tạo một chuỗi trong quá trình được đính kèm với một số hoạt động, chuỗi này sẽ bị giết khi hoạt động bị giết (tức là quy trình và chuỗi được liên kết)? – memcom
@tifftuff: Một hoạt động không phải là một ứng dụng. Một hoạt động là một thành phần của một ứng dụng. Một ứng dụng có thể có nhiều thành phần, bao gồm nhiều hoạt động, dịch vụ, vv Khi thành phần cuối cùng của một ứng dụng bị phá hủy (ví dụ, người dùng nhấn BACK từ hoạt động một và chỉ trong một ứng dụng nhỏ), quy trình được dành cho tái chế hoặc chấm dứt. KHÔNG LẤY NHỮNG THREADS. Nếu bạn bắt đầu chủ đề, bạn phải sắp xếp cho nó chấm dứt, vì Android sẽ không chấm dứt nó cho bạn, ngoài việc chấm dứt quá trình, điều này có thể không xảy ra trong một vài tuần. – CommonsWare
Cảm ơn. Bạn có bất kỳ đề xuất nào về việc liệu một Dịch vụ có phù hợp hơn để sử dụng hơn là một chuỗi cho nền tảng này không? – memcom