Trong bài viết trước của mình, mình đã trình bày về cách hoạt động đa nhiệm của Android, từ đó giải thích vì sao các bạn không nên lạm dụng nó. Thay vì dài dòng nhắc lại các định nghĩa về app, process và cách mà Android quản lý chúng, mình sẽ chỉ đề cập đến những ý kiến của những chuyên gia và các lập trình viên để bạn tham khảo. Hi vọng sau khi đọc bài này, các bạn sẽ có cái nhìn đúng đắn và toàn diện hơn về hệ điều hành Android.
Để tránh hiểu lầm, “lạm dụng task killer” nghĩa là thường xuyên dùng những task killer/manager như Advance Task Killer, Advance Task Manager, Memory Booster,... để thường xuyên end hàng loạt app, tự động kill mỗi 30 phút/khi tắt màn hình, bất kể đã ignore/exclude các app/process hệ thống, với mục đích “có thêm nhiều RAM trống, tiết kiệm pin, điện thoại chạy nhanh hơn”. Nếu bây giờ vẫn còn là năm 2009 và phần đông vẫn còn bị kẹt ở Donut thì câu nói trên có phần đúng. Tuy nhiên, bây giờ đã là 2011, đa số mọi người trên trái đất đều đang sử dụng Android 2.2 trở lên, đã đến lúc từ bỏ ý nghĩ “càng nhiều RAM trống càng tốt” rồi.
I. Google
Dianne Hackborn là kĩ sư phần mềm của Google, người đứng đầu việc xây dựng tính năng đa nhiệm của Android. Trong bài viết trên blog dành cho lập trình viên Android, Hackborn đã trình bày về tính đa nhiệm của Android, đồng thời định hướng của Google về việc phát triển ứng dụng cho Android. Qua những ý tiêu biểu sau, các bạn có thể thấy rằng Google hoàn toàn không muốn người dùng phải tự đóng app bằng cách này hay cách khác:
1. Chúng tôi không muốn đòi hỏi người dùng phải tự đóng ứng dụng khi dùng xong. Khuynh hướng này không phù hợp với một hệ điều hành di động, nơi mà người dùng sử dụng hàng loạt ứng dụng trong suốt cả ngày.
2. Thiết bị di động không có nhiều không gian hoán chuyển bộ nhớ, vì vậy có nhiều hạn chế về dung lượng bộ nhớ.
3. Vấn đề thời gian chuyển giữa các ứng dụng là cực kì quan trọng. Mục tiêu của chúng tôi là độ trễ này phải thấp hơn 1 giây. Phải chờ đợi lâu hơn sẽ làm người dùng nhanh chóng ghét bạn.
Hai yêu cầu đầu tiên là một sự mâu thuẫn thú vị. Chúng tôi không muốn người dùng phải bận tâm về việc quản lí ứng dụng nhưng cũng muốn làm nó trông như mọi ứng dụng đều chạy cùng một lúc, mặc cho hạn chế về dung lượng bộ nhớ. Do không thể tạo bộ nhớ hoán chuyển như trên môi trường desktop, đây là cách mà chúng tôi thực hiện điều đó:
Android không tắt ứng dụng hoàn toàn. Khi người dùng rời khỏi ứng dụng, process của ứng dụng đó vẫn chạy nền, cho phép nó có thể tiếp tục làm việc (tiếp tục tải trang web, chơi nhạc,...) nếu cần, và ứng dụng sẽ được load ngay lập tức khi người dùng mở lại.
Tuy nhiên, dung lượng bộ nhớ là có giới hạn và để khắc phục điều này, Android phải quyết định khi nào là lúc loại bỏ process không cần thiết. Quy luật mà Android loại bỏ process dựa trên 2 yếu tố: process đó có ảnh hưởng thế nào đến sử dụng của người dùng hiện thời và lần cuối người dùng cần process đó là khi nào.
Thế việc gì sẽ xảy ra khi người dùng quay trở lại một ứng dụng mà process bị kill bởi Android? Android khôi phục lại trạng thái của ứng dụng lúc người dùng rời nó bằng cách ghi nhận lại activity cuối cùng mà người dùng thực hiện trước đó và khởi tạo lại activity đó khi người dùng trở lại. Bằng cách này, trải nghiệm “mọi ứng dụng đều chạy một lúc” được giữ nguyên và vấn đề về bộ nhớ cũng được khắc phục.
Nguồn: http://android-developers.blogspot.com/
II. Austen, rom builder.
Austen, lập trình viên của nhiều bản CM cho Droid X và HTC, biết tường tận hệ điều hành Android từ ngoài vào trong. Dưới đây là ý kiến của anh về cách mà Android quản lí bộ nhớ và về task killer:
"Điều mà nhiều người không nhận ra đó là Android được thiết kế để chứa nhiều tác vụ trong bộ nhớ cùng 1 lúc. Vì sao? Vì Android là 1 nền tảng dành cho thiết bị di động. Điện thoại không bao giờ có thể nhanh như máy tính được. Để dev có thể tuân theo phương châm “1 giây” của mình, Google phải có những giải pháp nhất định.
Một trong những giải pháp này là cách mà Android quản lí bộ nhớ. Android sẽ giữ app trên RAM cho đến khi bắt buộc phải kill chúng. Nhờ vậy, khi bạn mở lại một app đã mở trước đó, app sẽ được tiếp tục thay vì khởi động lại từ đầu và giảm tối đa thời gian chờ.
Một điều nữa mà nhiều người không nhận ra là kernel của Android cũng có trình quản lí tác vụ riêng. Điều này có nghĩa là:
1. việc quản lí tác vụ ở mức kernel sẽ hiệu quả hơn mọi task killer của bên thứ 3, và
2. việc quản lí tác vụ trên Android hiển nhiên là nên nhường lại cho kernel
Trường hợp duy nhất mà bạn nên sử dụng task killer là khi bạn cần kill 1 app nhất định do bị treo/lỗi. Kill all không bao giờ là ý hay. Nhiều RAM trống lại càng không. Đó là cả một sự lãng phí. RAM luôn tiêu thụ cùng một lượng điện năng như nhau vào mọi thời điểm, bất kể RAM trống hay đầy. Android được thiết kế để chứa nhiều tác vụ trong RAM cùng một lúc, bởi việc đó cho phép máy chạy nhanh hơn.
Nói tóm lại, RAM trống nhiều không làm máy chạy nhanh hơn mà ngược lại, nó càng làm máy chậm đi. Bạn nên để Android tự quản lí hơn là dùng task killer."
Nguồn: http://howto.ccroms.net/
III. Life Hacker
Withson Gordon (biên tập viên của LifeHacker) thì nói rằng bạn nên quan tâm đến chu kỳ CPU* nhiều hơn là RAM.
Nhiều người sử dụng task killer cho biết rằng điện thoại của họ hoạt động tốt hơn sau khi giải phóng RAM. Nguyên nhân của việc này rất có thể là họ đã vô tình kill được 1 app “đểu” chứ không phải là do có nhiều RAM trống. Hoặc cũng có thể chỉ là hiệu ứng thuốc tinh thần*.
Nguồn: http://lifehacker.com/
*Chu kì CPU: 1 chu kì CPU có thể hiểu là 1 lần CPU lấy thông tin chỉ dẫn từ bộ nhớ, giải mã rồi thực hiện chỉ dẫn đó
*Placebo effect - hiệu ứng thuốc tinh thần: thuốc không có hiệu lực thực sự mà chỉ để bác sĩ dùng trấn an người bệnh, tạo niềm tin khỏi bệnh để đẩy nhanh việc điều trị.
IV. Cyanogen
Steve Kondik, cha đẻ của bản ROM CyanogenMod, thậm chí sẽ không thèm liếc đến bản error log mà các bạn gửi về nếu error log đó nói rằng bạn có sử dụng task killer:
Nguồn: http://twitter.com/cyanogen
V. Các lập trình viên của task killer nói gì?
Không chỉ trong cộng đồng người dùng mà ngay cả trong đội ngũ developer cũng có những ý kiến trái ngược nhau về mục đích của task killer. Mình xin trích dẫn một số ý kiến để các bạn tham khảo:
Rechild, công ty phát triển Advanced Task Killer, có trình bày trong phần giới thiệu trên Market:
Arron La, nhà phát triển của Advanced Task Manager, một trong những task killer tính phí có số lượt tải nhiều nhất trên Android Market, nói rằng:
Lập trình viên của TaskOS:
Xiao, lập trình viên của ES Task Manager, khi được hỏi rằng task killer có thực sự có ích không, đã trả lời:
Nguồn: http://androinica.com/
NextApp, công ty phát triển SystemPanel, phát biểu:
Có nhiều RAM trống không phải là điều tốt. Lượng RAM trống này tiêu thụ điện năng tương đương khi nó chứa dữ liệu. Vì vậy, sử dụng SystemPanel, cũng như mọi task killer khác, kill all là KHÔNG ĐƯỢC KHUYẾN KHÍCH. Bạn chỉ nên kill những app hoạt động không tốt. Tính năng End/Kill All chỉ dùng khi điện thoại của bạn có vấn đề mà bạn không rõ app nào là nguyên nhân.”
Nguồn: http://android.nextapp.com/
VI. Kết luận
Để chốt lại vấn đề, mình xin trích lời của Andrew Kameka, biên tập viên của Androinica: