Thứ Ba, 30 tháng 6, 2015

Đa nhiệm trên Android, iOS và Windows Phone

Android

Android có lẽ là hệ điều hành thú vị nhất để tìm hiểu về đa nhiệm, nó có một hệ thống "lai" mở rộng cửa cho phép các ứng dụng chạy nền nhưng lại được ẩn giấu đi để người dùng không phát hiện ra. Chính vì vậy mà bạn không thể chủ động quản lý ứng dụng chạy hay tắt được.

Khi bạn chuyển qua một chương trình khác, chương trình mà bạn đang chạy sẽ không bị dừng lại, toàn bô tiến trình của nó vẫn sẽ được mở cho đến khi nào máy còn chịu được. Khi Android xác định máy đang thiếu bộ nhớ, nó sẽ tự động tắt tiến trình đó đi để giải phóng tài nguyên. Trước khi tắt, trạng thái làm việc của chương trình sẽ được lưu lại để khi truy xuất lần nữa, mọi công việc bạn làm vẫn được giữ nguyên. Tất nhiên, với các quản lý này bạn sẽ không biết được chương trình đó vừa bị tắt.

Vậy các chương trình có thể làm gì khi nó chạy nền? Android có 2 công cụ cho các chương trình của bên thứ 2, đó là boardcast receivers và dịch vụ. Với Boardcast, khi một chương trình chạy nền, nó sẽ luôn được thông báo về các sự kiện nhất định, chẳng hạn như bạn đã di chuyển được 500 mét hay thời lượng pin của bạn giảm còn 47%... Đây cũng là cách thức các chương trình sử dụng cơ chế push của Google hoạt động. Gmail là một ví dụ, thay vì luôn gửi các lệnh về máy chủ để xác định email mới, nó chỉ việc ngồi chơi và chờ thông báo gửi tới là email đã đến. Với cách hoạt động này, các chương trình sẽ không sử dụng tài nguyên hệ thống nhưng vẫn sẵn sàng hoạt động khi cần thiết.

Dịch vụ có lẽ quen thuộc hơn với bạn, nó là các yêu cầu từ chương trình cho hệ thống biết là nó cần chạy những gì, trong khoảng thời gian nào, chẳng hạn như chơi nhạc, định vị...

Vậy những điều gì mà chương trình bên thế ba không thể làm khi chạy nền? Thật là thì Android cũng khá mở và hạn chế không phải là lớn. Chỉ là vì ở Android 1.0, Google hoàn toàn không đưa ra một giới hạn nào cho các chương trình nên chúng liên tục "đốt" pin của máy. Chính vì vậy mà từ Android 1.5 trở đi, tất cả các chương trình chạy nền không được sử dụng quá 5-10% công suất của CPU, ngoài ra thì các chương trình nền cũng không được phép thoát khỏi chạy nền một cách dễ dàng nữa mà phải phụ thuộc vào hệ thống cảnh báo của máy.

iOS:

iPhone luôn là hệ điều hành đa nhiệm kể từ thời điểm nó ra đời, nhưng nó lại bị giới hạn trong các chương trình của chính Apple. Kể từ OS 4.0, giới hạn đó đã phần nào được giảm bớt với việc hỗ trợ đa nhiệm từ phần mềm của bên thứ 3 và cho phép chúng chạy nền. Tuy vậy, những giới hạn của OS 4.0 vẫn là khá nhiều. Cũng như Android, ý tưởng đằng sau iPhone OS là người dùng không thật sự quản lý các chương trình theo ý mình mà hệ thống sẽ làm điều đó. Tuy vậy, không có nhiều tài liệu kỹ thuật nói rõ về việc này. Dù sao, chúng ta vẫn biết được một vài kiến thức cơ bản về nó.

iPhone hoạt động theo 7 dịch vụ đa nhiệm cơ bản mà bạn đã biết trong bài giới thiệu OS 4.0 Tinh Tế đăng tải trước kia. 2 dịch vụ cơ bản là fast-app switching và task finishing sẽ được hoạt động khi một chương trình được chạy nền. Dịch vụ đầu tiên sẽ bảo đảm đóng băng chương trình lại mà không tắt nó đi, cho phép người dùng giữ nguyên những gì đang làm khi thoát khỏi chương trình. Và vì người dùng không tự mình quản lý ứng dụng nào tắt hay mở, hệ điều hành sẽ quyết định điều đó. Nó sẽ tự động tắt các chương trình ngay khi có quá nhiều thứ đang chạy, gần giống với ý tưởng của Android. Khi bạn thoát ra khỏi một chương trình mà chương trình đó vẫn đang cần phải hoạt động để hoàn tất các tác vụ thì nó sẽ thông báo cho hệ điều hành biết để không ngắt tiến trình của nó đi cho đến khi tác vụ được hoàn thành.

Các chương trình bên thứ 3 cũng được Apple cung cấp một số tính năng hạn chế khi hoạt động trong chế độ chạy nền. Điểm khác biệt lớn nhất giữa iPhone và Android là các ứng dụng nền trên iPhone không hoạt động hoàn toàn như Android mà nó dựa vào các dụng vụ của Apple cung cấp, đó chính là dịch vụ VoIP, âm thanh và địa điểm. Dịch vụ địa điểm này hoạt động theo kiểu định vị bằng các trạm phát sóng để tiết kiệm pin và GPS cho các dịch vụ dẫn đường.

Hạn chế của đa nhiệm iPhone là không một phần mềm nào thoát khỏi 7 dịch vụ trên. Chẳng hạn nếu một phần mềm nào không phải là VoIP hay Audio... nó sẽ không thể chạy nền được cho dù phần mềm đó vẫn vẫn giữ nguyên được trang thái của mình trong RAM để quay trở lại nhanh chóng hơn khi được gọi.

 Windows Phone

Microsoft đã quay ngược 180 độ, họ đã từng có một trong những hệ điều hành đa nhiệm mở nhất là Windows Mobile nhưng giờ đây, Windows Phone 7 lại là hệ điều hành hạn chế nhất. Mục tiêu của họ là thiết kế Windows Phone 7 sao cho người dùng có những trải nghiệm tốt nhất mà không cần đụng đến đa nhiệm.


Khi bạn chuyển qua một chương trình khác, chương trình hiện tại sẽ không bị tắt đi hoàn toàn mà được lưu trạng thái vào bộ nhớ rồi đóng băng tại đó chờ đợi fast-app switching, giống với cách Android và iPhone thực hiện. Giám đốc bộ phận truyền thông di động của Microsoft, ông Aaron Woodman cho biết: "Khi bạn thoát một chương trình nào đó, tài nguyên hệ thống sẽ được giải phóng nếu hệ điều hành yêu cầu nhưng bạn vẫn có thể quay lại ngay vị trí mà mình tắt chương trình. Khi hệ điều hành cần, chương trình sẽ bị đưa vào quá trình dehydrated và sẽ mở lại ngay lập tức khi bạn truy xuất nó, Microsoft gọi quá trình này là rehydrated. Xếp theo mức độ, dehydrated nằm ngay trên tắt tiến trình 1 nấc, nghĩa là rất gần với việc bị tắt rồi.

Giống như các hệ điều hành iPhone trước bản 4.0, các ứng dụng không thể hoạt động nhiều khi nó bị tắt. Lúc này, hệ điều hành chỉ có thể phát ra các cảnh bảo. Nếu bạn từng coi video trình diễn phần mềm Pandora trên Windows Phone 7, đừng mong chương trình nào cũng được đối xử như vậy, chỉ một vài đối tác cao cấp mới được làm điều đó thôi. Microsoft cũng có rất nhiều cách thức thông báo khác nhau, từ tile notificatiion để push các thông tin lên phần Live Tile ở màn hình chủ, toast notification để hiện lên một cửa sổ pop-up, chẳng hạn như là cuộc gọi cho đến raw notification để phát thông báo đến các chương trình.

Bị giới hạn rất nhiều, hầu hết các phần mềm chỉ có thể nhận và gửi thông báo khi bị ẩn xuống. Tất nhiên là các phần mềm từ "đối tác đặc biệt" sẽ có nhiều quyền hạn hơn một chút. Tuy vậy, Woodman cho biết họ có thể sẽ thay đổi cách thức tùy thuộc và bên thứ ba và người dùng.

Phân biệc về đa nhiệm trên Android và iOS

Đa nhiệm trên iOS

Thông thường, ai sử dụng các thiết bị di động của Apple (iPhone, iPad) cũng biết thao tác nhấn đúp phím Home, bên dưới màn hình để hiện ra một danh sách các ứng dụng đang chạy. Người dùng muốn chuyển sang ứng dụng nào chỉ việc nhấn vào ứng dụng đó, hoặc muốn tắt thì chỉ việc giữ biểu tượng bất kỳ một lúc, sau khi trên mỗi biểu tượng ứng dụng hiện lên dấu tròn đỏ, chỉ việc nhắp vào đó là ứng dụng sẽ được đóng lại. Nhiều người cho rằng, đây là hình thức chạy đa nhiệm trên iOS và để tiết kiệm pin, nên tắt bớt các ứng dụng đang chạy theo cách này.

Tuy nhiên, sự thực thì cái gọi là đa nhiệm này không giống như mọi người thường nghĩ. Các ứng dụng hiện ở thanh quản lý tác vụ khi nhấn đúp phím Home thực chất không phải là các ứng dụng đang chạy nền, mà chỉ là danh sách hiển thị các ứng dụng chạy gần đây. Nền tảng hệ điều hành được kiểm soát chặt chẽ của Apple cho phép hãng này hạn chế hầu như tất cả các ứng dụng tiếp tục thực thi mã lệnh của mình một khi phím Home đã được bấm. Hay nói cách khác, khi nhấn phím Home và quay về màn hình chủ, gần như mọi ứng dụng sẽ dừng hoạt động (theo một nghĩa nhất định).

Về cơ bản, iOS quy định 5 mức tình trạng cho một ứng dụng. Mức độ thấp nhất là Không hoạt động (Not Running), đề cập đến việc ứng dụng đã được đóng hoặc chưa từng được mở. Mức độ Chưa kích hoạt (Inactivate) là mức độ mà một ứng dụng đang chạy nhưng không thực thi mã lệnh nào cả. Mức độ Kích hoạt (Active) là mức độ mà một ứng dụng đang chạy hoặc đang được sử dụng trên màn hình.

Khi người dùng nhấn nút Home, ứng dụng đang chạy (mức Kích hoạt) sẽ chuyển về trạng thái chạy nền (mức Chạy nền (Background). Mức Chạy nền là mức mà ứng dụng dù không hiển thị ở màn hình chính nhưng vẫn tiếp tục thực thi lệnh. Tuy nhiên, hầu hết các ứng dụng mức Chạy nền sẽ ngay lập tức chuyển sang mức cuối cùng là mức Chờ (Suspended). Mức Chờ mà mức mà ứng dụng được lưu vào bộ nhớ nhưng không sử dụng bất kỳ tài nguyên nào của vi xử lý, không thực thi bất cứ mã lệnh nào. Nếu thiết bị cần thêm tài nguyên bộ nhớ cho một trò chơi hay một ứng dụng nặng ký, các ứng dụng ở mức Chờ sẽ bị xóa khỏi bộ nhớ.

Apple chỉ cho phép duy trì các tác vụ đang chạy nền được thực thi mã lệnh trong một vài giây trong những trường hợp đặc biệt (như các ứng dụng liên quan đến VoIP, định vị…) và các mã lệnh (API) này được hãng kiểm soát rất chặt chẽ. Các mã lệnh của các ứng dụng này vì thế có thể vẫn chạy và không lệ thuộc vào việc ứng dụng đó có được hiển thị trên thanh quản lý tác vụ hay không. Theo hãng thì một ứng dụng tốt phải là ứng dụng tự chuyển về chế độ Chờ mỗi khi thực thi xong mã lệnh và người dùng không cần thiết phải quan tâm đến việc tìm cách điều khiển quá trình này một khi đã sử dụng hệ điều hành iOS.

Đa nhiệm trên Android

Kể từ hệ điều hành Android 4.0 Ice Cream Sandwich, Google đã thay đổi đang kể cách thức quản lý đa nhiệm của mình. Bằng việc đưa ra Danh sách những ứng dụng đang chạy gần đây, người dùng chỉ việc tắt bằng cách xóa nó khỏi danh sách. Cũng như iOS, nó mang lại cho người dùng cảm giác là mình đang quản lý các tác vụ chạy đa nhiệm, và tắt bớt ứng dụng có thể giải phóng thêm bộ nhớ. Nhưng sự thật không hoàn toàn như vậy.

Danh sách các ứng dụng chạy gần đây chỉ đơn giản đúng là danh sách liệt kê các ứng dụng vừa chạy với hình ảnh thu nhỏ. Chúng đơn giản chỉ có mặt trên danh sách mà không đảm bảo là đang thực sự thực thi một mã lệnh nào đó. Tuy nhiên khác với iOS, khi người dùng bấm nút quay về màn hình chính (Home), ứng dụng đang chạy không ngay lập tức chuyển về trạng thái Chờ mà các tiến trình liên quan đến ứng dụng này vẫn tiếp tục chạy nền, vẫn cho phép ứng dụng thực thi các công việc của nó..

Khi người dùng muốn quay lại ứng dụng họ đã thoát, tiến trình chạy của ứng dụng đó sẽ được khôi phục lên màn hình chính gần như tức thời. Lý tưởng mà nói, một thiết bị Android sẽ không bao giờ bị hết bộ nhớ và tất cả các tiến trình của các ứng dụng đang chạy có thể trú ngụ ở RAM vĩnh viễn. Nhưng trên thực tế, đến một thời điểm nào đó mà thiết bị của bạn thấy thiếu tài nguyên bộ nhớ, cũng như iOS, Android sẽ đóng tất cả các tiến trình đang chạy ảnh hưởng đến tài nguyên. Và khi người dùng quay lại mở ứng dụng bị đóng đó, toàn bộ tiến trình của ứng dụng sẽ phải tải lại từ đầu. Vì thế mặc dù ứng dụng này có thể ở trong danh sách các ứng dụng chạy gần đây nhưng thực ra nó cũng không liên quan tới việc ứng dụng đó có đang chạy nền hay không.

Trong những lần cập nhật gần đây, Android đã đủ thông minh để quản lý tác vụ đa nhiệm thay cho người dùng. Vì thế chẳng có lý do gì mà hệ điều hành này để người dùng can thiệp vào quá trình quản lý tác vụ cả. Các tác động của người dùng sẽ chỉ gây những ảnh hưởng xấu đến quá trình tự động hóa quản lý của Android trong công cuộc làm cho hệ thống chạy trơn tru hơn.

Tuy nhiên, các nhà phát triển vẫn có cách để tạo ra các ứng dụng thực thi mã lệnh khi chạy nền trên Android mà không bị chính hệ điều hành này tắt mất. Nguyên do là cũng như iOS, một số lệnh liên quan đến truyền dẫn thông tin dùng cho các dịch vụ định vị hay đồng bộ luôn được phép chạy nền mà không bao giờ bị tắt. Thêm vào đó, các nhà phát triển cũng có thể tạo ra các ứng dụng luôn duy trì chạy nền dưới dạng các Dịch vụ (Service), và vì thế có thể vượt qua được hạn chế bị hệ thống giải phóng khỏi bộ nhớ. Đây là cơ chế đa nhiệm đặc trưng trên các thiết bị Android. Do các tiến trình thông thường sẽ bị hệ thống giải phóng trước các tiến trình Dịch vụ, các nhà phát triển sẽ làm cho hệ thống nhận thấy mức độ quan trọng của một ứng dụng Dịch vụ bằng cách đưa các dịch vụ này từ chạy nền lên chạy chính trên màn hình thông qua các Thông báo (Notification) dưới dạng các biểu tượng trên thanh thông báo. Người dùng có thể thấy các mẹo này trên những ứng dụng như Locale (thông tin về vị trí hiện tại) hay các ứng dụng chơi nhạc.

Ai nắm quyền điều khiển tác vụ đa nhiệm?

Dù là iOS hay Android, người dùng cũng cần hiểu là hệ điều hành sẽ là người quản lý hầu hết các tác vụ đa nhiệm. iOS sẽ không bao giờ cho phép người dùng tự ý can thiệp vào các tác vụ đang chạy. Các tiến trình ở mức Chờ sẽ bị hệ thống tự động tắt khi cần thiết, không phụ thuộc vào việc ứng dụng đó có ở trên thanh quản lý tác vụ hay không.

Android cũng tương tự, hệ điều hành sẽ đóng tất cả các tiến trình khi thấy không cần thiết nữa, tuy nhiên nó “rộng rãi” hơn iOS là cho các nhà phát triển một số cơ hội tạo ra các ứng dụng chạy nền. Theo đó các tiến trình liên quan đến một ứng dụng khi ở chế độ nền vẫn có thể tự do thực thi lệnh, chỉ bị tắt khi hệ thống thấy bộ nhớ đệm bị đầy. Nếu muốn tạo ra các ứng dụng chạy nền hiệu quả hơn, các nhà phát triển cũng có thể viết các ứng dụng có dùng các lệnh liên quan đến truyền dẫn thông tin (BroadcastReceiver) hay các ứng dụng dưới dạng các Dịch vụ. Và mặc dù giao diện Android 4.0 cho phép người dùng xem hay thêm bớt danh sách các ứng dụng vừa chạy, điều đó cũng không có nghĩa là người dùng có thể kiểm soát các tác vụ đa nhiệm này. Công việc này vẫn sẽ do hệ điều hành tự quyết định.

Tuy nhiên, người dùng cũng không nên quá lo lắng về điều này. Các ứng dụng chạy nền dù là trên iOS hay Android cũng đều được hệ điều hành quản lý theo cách thức hiệu quả nhất. Cả hai nền tảng này sẽ tự biết cách cho phép ứng dụng nào chạy hay tự tắt các tiến trình không cần thiết, và việc người dùng có thêm hay xóa các ứng dụng trên thanh quản lý tác vụ hầu như chả có ích gì ngoài mang lại một chút yên tâm cho mình.