Điều gì chính xác xảy ra khi bạn vuốt một ứng dụng Android từ danh sách ứng dụng gần đây?
Khi bạn vuốt một ứng dụng ra khỏi danh sách ứng dụng đang chạy Android của bạn, chính xác điều gì sẽ xảy ra với ứng dụng và dữ liệu? Đọc tiếp khi chúng tôi điều tra.
Phiên hỏi và trả lời hôm nay đến với chúng tôi nhờ sự nhiệt tình của Android - một phân ngành của Stack Exchange, một nhóm các trang web hỏi đáp theo định hướng cộng đồng.
Câu hỏi
Người đọc đam mê Android Eldarerathis tò mò về chức năng vuốt ứng dụng cho phép bạn kéo danh sách các ứng dụng đang chạy qua nút home và sau đó vuốt chúng sang phải, có lẽ là để đóng chúng:
Danh sách ứng dụng gần đây trong Ice Cream Sandwich đã thêm khả năng vuốt các ứng dụng ra khỏi danh sách, do đó loại bỏ chúng vĩnh viễn (và theo như tôi biết đây là chức năng vanilla, không phải là CM / ROM tùy chỉnh). Các điểm nổi bật về tài liệu và nền tảng dường như không đề cập đến hoạt động của chức năng này, nhưng tôi tò mò muốn biết hệ thống đang thực sự làm gì.
Thêm vào sự tò mò của tôi, tôi quyết định thực hiện một bài kiểm tra nhanh: Tôi đã khởi động Music trên bản cài đặt CM9, sau đó sao lưu nó. Sau đó tôi đã kiểm tra danh sách ứng dụng gần đây và thấy nó thực sự ở đó (và ở trạng thái thích hợp, dựa trên hình thu nhỏ). Sau đó tôi đã đi vào
Cài đặt-> Ứng dụng
và buộc dừng ứng dụng Âm nhạc, nhưng nó vẫn được liệt kê trong danh sách gần đây, khiến tôi tin rằng nó không được kết nối với các quá trình kéo dài trong nền.Nhận ra rằng Âm nhạc có thể là một lựa chọn tồi, tôi cũng đã thử nghiệm với ứng dụng USA Today. Điều này về cơ bản thể hiện hành vi tương tự, và có vẻ như nó đã bị buộc phải khởi động lại sau khi dừng lực lượng (điều này có ý nghĩa) mặc dù hình thu nhỏ trong danh sách ứng dụng gần đây không phản ánh điều này (tôi đoán vậy?).
Vậy, điều gì thực sự xảy ra ở cấp độ HĐH khi bạn vuốt một ứng dụng ra khỏi danh sách gần đây? Có phải nó chỉ đơn giản là xóa dữ liệu của ứng dụng ra khỏi RAM và thu gom rác, phá hủy trạng thái đã lưu của ứng dụng?
Chính xác thì chuyện gì đang xảy ra khi bạn vuốt ứng dụng ra khỏi danh sách?
Những câu trả lời
Người đóng góp nhiệt tình cho Android Austin Mills cung cấp một số thông tin chi tiết:
Các ứng dụng vuốt ra khỏi danh sách ứng dụng gần đây là vanilla, và vâng, không được ghi chép rõ ràng. Đây là chủ đề của một số lượng lớn các cuộc thảo luận trên các diễn đàn Android khác nhau. Sự đồng thuận dường như được mô tả tốt nhất ở đây trong một số ý kiến: rằng hành vi tương tự nhưng không hoàn toàn giống như đóng ứng dụng - nói chung (đối với các ứng dụng không xác định xử lý nút quay lại rõ ràng) cũng giống như việc quay lại đủ số lần từ trong ứng dụng mà bạn thoát khỏi ứng dụng đó.
Liên kết có thêm một số chi tiết về các chi tiết cụ thể, nhưng nhìn chung bạn có thể nghĩ về nó như thoát khỏi ứng dụng.
Cụ thể với ứng dụng Âm nhạc, tôi tin rằng nó khởi động một dịch vụ, vì vậy trong khi nhiệm vụ (ứng dụng / Giao diện người dùng âm nhạc) có thể bị đóng, dịch vụ tiếp tục chạy trong nền để nhạc của bạn đột nhiên dừng lại chỉ vì tác vụ đã bị xóa vì lý do quản lý bộ nhớ. Điều đó có thể đã ảnh hưởng đến những gì bạn thấy.
Sau đó, tham gia vào vòng tròn câu hỏi và trả lời của cuộc sống, Eldarerathis đã trở lại với một số nghiên cứu của riêng mình để làm tròn câu trả lời:
Tôi dường như đã tìm thấy các thuật ngữ tìm kiếm kỳ diệu dẫn đến một số giải thích từ nhân viên của Google. Cụ thể, tôi tìm thấy một vài nơi khác nhau, nơi Dianne Hackborn giải thích những gì xảy ra khi bạn vuốt thứ gì đó ra khỏi danh sách gần đây. Đầu tiên là một nhận xét về một trong những bài đăng trên Google+ của cô ấy:
Mũ [W] đặc biệt xảy ra khi bạn thực hiện một tác vụ gần đây: (1) giết bất kỳ nền hoặc quy trình trống nào của ứng dụng (xem ở đây để biết điều này có nghĩa là gì) và (2) sử dụng API mới để nói với bất kỳ dịch vụ nào của ứng dụng về nhiệm vụ bị xóa để nó có thể làm bất cứ điều gì nó cho là phù hợp.
Cô cũng ghi chú trong một bình luận blog:
Trên thực tế, loại bỏ một mục trong các tác vụ gần đây sẽ giết chết mọi quá trình nền tồn tại cho quy trình. Nó sẽ không trực tiếp khiến các dịch vụ dừng lại, tuy nhiên có một API để họ tìm ra nhiệm vụ đã bị xóa để quyết định xem họ có muốn điều này có nghĩa là họ nên dừng lại hay không. Điều này là do việc xóa nói rằng nhiệm vụ gần đây của ứng dụng email sẽ không khiến ứng dụng dừng kiểm tra email.
Nếu bạn thực sự muốn dừng hoàn toàn một ứng dụng, bạn có thể nhấn và giữ các tác vụ gần đây để truy cập thông tin ứng dụng và nhấn dừng lại ở đó. Buộc dừng là hủy hoàn toàn ứng dụng - tất cả các quy trình đều bị hủy, tất cả các dịch vụ bị dừng, tất cả các thông báo đã bị xóa, tất cả các báo thức đã bị xóa, v.v. Ứng dụng không được phép khởi chạy lại cho đến khi được yêu cầu rõ ràng.
Vì vậy, có vẻ như tóm tắt là việc vuốt một ứng dụng ra khỏi danh sách trước tiên sẽ giết tất cả các quy trình nền cho ứng dụng, sau đó sử dụng
onTaskRemond
để thông báo cho ứng dụng rằng tác vụ nền đã bị xóa. Tại thời điểm đó, có vẻ như tùy thuộc vào ứng dụng để quyết định điều gì sẽ xảy ra, vì vậy tôi đoán ở đó về mặt kỹ thuật không phải một quy tắc khó và nhanh về những gì xảy ra với ứng dụng ngoài thời điểm đó.
Có một cái gì đó để thêm vào lời giải thích? Tắt âm thanh trong các ý kiến. Bạn muốn đọc thêm câu trả lời từ những người dùng Stack Exchange am hiểu công nghệ khác? Kiểm tra chủ đề thảo luận đầy đủ ở đây.