vncongnghe - 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[SUP]*[/SUP] nhiều hơn là RAM.
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:
“Nếu bạn có cài một task killer, phắn ** khỏi bug tracker của CM và thử tái hiện lại lỗi đó khi không có task killer”
“Tôi phải nói điều này - Task manager app sẽ làm hỏng hệ thống và bất cứ sự tăng lên về hiệu năng hoạt động nhận thấy sau đó chỉ là hiệu ứng thuốc trấn an hoặc là bạn đã kill được một app hoạt động không tốt.”
“Bất kì vấn đề nào gặp phải với CM khi sử dụng “task manager” app sẽ bị xem là không có hiệu lực.”
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:
Chúng tôi khuyên người dùng nên dùng ATK để kill app một cách thủ công hơn là để auto kill.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:
“Advanced Task Manager là hoàn toàn cần thiết cho những thiết bị cũ và/hoặc chạy Android 1.6 trở về trước để có thể nhanh chóng giải phóng RAM. ATM đến một lúc nào đó sẽ được xem là “hết thời”, tuy nhiên vẫn có giá trị sử dụng nhất định do nó cho phép người dùng kill app và service một cách tiện lợi hơn.”Lập trình viên của TaskOS:
“Mục đích của TaskOS là để chuyển giữa các app hơn là kill app. Kill all app và service là không nên. Những service cần thiết cho app và hệ điều hành hoạt động ổn định. TaskOS không bao giờ hiện service. Kill hàng loạt service mà không biết vai trò của chúng có thể gây hàng loạt lỗi: báo thức không reng, không hiện thông báo khi có tin nhắn/email mới, không chơi nhạc được,... ”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:
“Câu hỏi đó là vô nghĩa chừng nào còn nhiều người sử dụng task killer. Khi có cầu tất còn cung.”
Nguồn: http://androinica.com/
NextApp, công ty phát triển SystemPanel, phát biểu:
“Android là một hệ điều hành cho thiết bị di động. Cách mà Android hoạt động khác hoàn toàn so với những hệ điều hành cho máy tính. Trên Windows, Mac hoặc Ubuntu, người dùng phải tự đóng app để giữ một lượng RAM cần thiết. Android sẽ tự gỡ app khỏi RAM khi cần thêm bộ nhớ và tự load các app mà nó nghĩ là người dùng sẽ sớm sử dụng trở lại.
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.”
Để 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:
Android Market hiện có hàng trăm task killer. Tôi chắc rằng sẽ có một số người phản bác rằng task killer vẫn có những lợi ích ngắn hạn nhưng nhìn chung, task killer là không cần thiết trong đa số trường hợp và lợi bất cập hại. Các bạn có thể dùng một số task killer để uninstall app hoặc chuyển giữa các app nhưng đừng bao giờ dùng task killer để kill app liên tục. Android ( >=2.2 ) tự bản thân nó đã có thể quản lí bộ nhớ rất hiệu quả rồi, vì vậy tốt nhất là để Android tự làm việc đó.
>> Xem thêm
Để 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
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[SUP]*[/SUP] nhiều hơn là RAM.
Cách hoạt động của ứng dụng như Advanced Task Killer, task killer phổ biến nhất trên Market, khiến dùng bình thường dễ hiểu nhầm rằng giải phóng bộ nhớ RAM trên Android là một điều tốt. Khi được mở, ATK sẽ đưa ra 1 danh sách các app “đang chạy” và cho phép người dùng kill tất cả nếu muốn. Bạn cũng có thể vào menu để xem chi tiết hơn các service nào đang chiếm RAM, chiếm bao nhiêu và lượng RAM trống trên máy. Cách trình bày này dễ khiến nhiều người cho rằng mục đích của kill app là để có thêm RAM trống. Tuy vậy, ATK lại không hề đề cập đến số chu kì CPU mà các app sử dụng - yếu tố thực sự ảnh hưởng đến tốc độ xử lí và làm hao pin nhất. Khi sử dụng TK để kill app tức là các bạn sử dụng nhiều chu kì CPU hơn và qua đó sử dụng nhiều pin hơn. Khi có nhiều RAM trống, Android sẽ ngay lập tức tìm cách lấp chỗ RAM trống này bằng các app khác. Một số app cũng có thể tự kích hoạt chính nó bằng 1 số điều kiện nhất định. Sau đó các bạn lại tiếp tục kill app. Vòng luẩn quẩn này là nguyên nhân khiến điện thoại của các bạn hết pin nhanh hơn nhiều so với việc chỉ mặc kệ app trên RAM (hoàn toàn không dùng chu kì CPU)
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[SUP]*[/SUP].
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
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[SUP]*[/SUP].
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:
“Nếu bạn có cài một task killer, phắn ** khỏi bug tracker của CM và thử tái hiện lại lỗi đó khi không có task killer”
“Tôi phải nói điều này - Task manager app sẽ làm hỏng hệ thống và bất cứ sự tăng lên về hiệu năng hoạt động nhận thấy sau đó chỉ là hiệu ứng thuốc trấn an hoặc là bạn đã kill được một app hoạt động không tốt.”
“Bất kì vấn đề nào gặp phải với CM khi sử dụng “task manager” app sẽ bị xem là không có hiệu lực.”
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:
Chúng tôi khuyên người dùng nên dùng ATK để kill app một cách thủ công hơn là để auto kill.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:
“Advanced Task Manager là hoàn toàn cần thiết cho những thiết bị cũ và/hoặc chạy Android 1.6 trở về trước để có thể nhanh chóng giải phóng RAM. ATM đến một lúc nào đó sẽ được xem là “hết thời”, tuy nhiên vẫn có giá trị sử dụng nhất định do nó cho phép người dùng kill app và service một cách tiện lợi hơn.”Lập trình viên của TaskOS:
“Mục đích của TaskOS là để chuyển giữa các app hơn là kill app. Kill all app và service là không nên. Những service cần thiết cho app và hệ điều hành hoạt động ổn định. TaskOS không bao giờ hiện service. Kill hàng loạt service mà không biết vai trò của chúng có thể gây hàng loạt lỗi: báo thức không reng, không hiện thông báo khi có tin nhắn/email mới, không chơi nhạc được,... ”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:
“Câu hỏi đó là vô nghĩa chừng nào còn nhiều người sử dụng task killer. Khi có cầu tất còn cung.”
Nguồn: http://androinica.com/
NextApp, công ty phát triển SystemPanel, phát biểu:
“Android là một hệ điều hành cho thiết bị di động. Cách mà Android hoạt động khác hoàn toàn so với những hệ điều hành cho máy tính. Trên Windows, Mac hoặc Ubuntu, người dùng phải tự đóng app để giữ một lượng RAM cần thiết. Android sẽ tự gỡ app khỏi RAM khi cần thêm bộ nhớ và tự load các app mà nó nghĩ là người dùng sẽ sớm sử dụng trở lại.
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.”
Để 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:
Android Market hiện có hàng trăm task killer. Tôi chắc rằng sẽ có một số người phản bác rằng task killer vẫn có những lợi ích ngắn hạn nhưng nhìn chung, task killer là không cần thiết trong đa số trường hợp và lợi bất cập hại. Các bạn có thể dùng một số task killer để uninstall app hoặc chuyển giữa các app nhưng đừng bao giờ dùng task killer để kill app liên tục. Android ( >=2.2 ) tự bản thân nó đã có thể quản lí bộ nhớ rất hiệu quả rồi, vì vậy tốt nhất là để Android tự làm việc đó.
Nguồn:
Cyanogen
Google Android Developer Blog
NextApp
Austen's Homepage
LifeHacker
Androinica
tinhte.vn