Phiên Hỏi & Đáp hôm nay đến với chúng tôi lịch sự của Người đam mê Android - một phân khu của Stack Exchange, một nhóm các trang web Hỏi & Đáp do cộng đồng điều hành.
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 ứng dụng đang chạy của mình qua nút trang chủ và sau đó vuốt chúng sang phải, có lẽ là đóng chúng:
The recent apps list in Ice Cream Sandwich added the ability to swipe apps out of the list, thereby dismissing them permanently (and as far as I know this is a vanilla function, not a CM/custom ROM one). The documentation and platform highlights don’t appear to cover the under-the-hood workings of this functionality, but I’m curious to know what the system is actually doing.
Further adding to my curiosity, I decided to do a quick test: I started up Music on a CM9 install, then backed out of it. I then checked the recent apps list and saw it was indeed there (and in the proper state, based on the thumbnail). I then went into
Settings->Applications
và lực lượng đã dừng ứng dụng Âm nhạc nhưng ứng dụng này 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 là hành vi tương tự, và có vẻ như nó đã buộc phải “khởi chạy lại” sau khi lực dừng (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 (được lưu trong bộ nhớ cache, tôi đoán vậy).
Vậy điều gì thực sự xảy ra ở cấp hệ điều hành khi bạn vuốt một ứng dụng ra khỏi danh sách gần đây? Liệu nó có đơn giản xóa dữ liệu của ứng dụng ra khỏi RAM và rác thu thập dữ liệu, phá hủy trạng thái đã lưu của ứng dụng không?
Chính xác những gì đang diễn 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 cho Android Enthusiast Austin Mills cung cấp một số thông tin chi tiết:
Việc vuốt ứng dụng ra khỏi danh sách ứng dụng gần đây là vani và có, không được ghi lại tài liệu. Đâ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… sự đồng thuận dường như được mô tả tốt nhất ở đây trong một số nhận xét: rằng hành vi này tương tự nhưng không chính xác 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) đó là điều tương tự như đánh lại đủ thời gian từ bên trong một ứng dụng mà bạn thoát ra khỏi nó.
Liên kết có một số chi tiết hơn về chi tiết cụ thể, nhưng nhìn chung bạn có thể nghĩ về nó như là bỏ ứng dụng.
Cụ thể đối với ứng dụng Nhạc, tôi tin rằng nó bắt đầu một dịch vụ, vì vậy trong khi nhiệm vụ (ứng dụng Nhạc / Giao diện người dùng) có thể bị đóng, dịch vụ vẫn tiếp tục chạy ẩn để nhạc của bạn không đột ngột dừng 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 ra câu trả lời:
I appear to have found the magical search terms that led to some explanations from Google employees. Specifically, I found a couple of different places where Dianne Hackborn explains what happens when you swipe something out of the recent list. The first is a comment on one of her Google+ posts:
[W]hat specifically happens when you swipe away a recent task is it: (1) kills any background or empty processes of the application (see here for what this means), and (2) uses the new API to tell any services of the application about the task being removed so it can do whatever it thinks is appropriate.
She also notes in a blog comment:
Actually, removing an entry in recent tasks will kill any background processes that exist for the process. It won’t directly causes services to stop, however there is an API for them to find out the task was removed to decide if they want this to mean they should stop. This is so that removing say the recent task of an e-mail app won’t cause it to stop checking for e-mail.
If you really want to completely stop an app, you can long press on recent tasks to go to app info, and hit force stop there. Force stop is a complete kill of the app - all processes are killed, all services stopped, all notifications removed, all alarms removed, etc. The app is not allowed to launch again until explicitly requested.
So, it looks like the summary is that swiping an app out of the list will first kill all background processes for the app, then use
onTaskRemoved
để thông báo cho ứng dụng biết rằng tác vụ nền đã bị xóa. Vào thời điểm đó, có vẻ như ứng dụng quyết định điều gì sẽ xảy ra, vì vậy tôi đoán có kỹ thuật không phải một quy tắc cứng nhắc và nhanh chóng về những gì xảy ra với ứng dụng ngoài điểm đó.
Có cái gì để thêm vào lời giải thích? Â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 có hiểu biết công nghệ khác? Xem toàn bộ chuỗi thảo luận tại đây.