Tối ưu hoá quyền truy cập mạng

Việc sử dụng đài phát không dây để chuyển dữ liệu có thể là một trong những nguồn tiêu hao pin đáng kể nhất của ứng dụng. Để giảm thiểu tình trạng hao pin liên quan đến hoạt động mạng, bạn cần phải hiểu rõ cách mô hình kết nối sẽ ảnh hưởng đến phần cứng vô tuyến cơ bản.

Phần này giới thiệu máy trạng thái của đài không dây và giải thích cách mô hình kết nối của ứng dụng tương tác với máy trạng thái đó. Sau đó, trang web này cung cấp một số kỹ thuật khi làm theo các bước này, sẽ giúp giảm thiểu tác động của dữ liệu mức tiêu thụ pin.

Máy trạng thái radio

Đài phát thanh không dây trên thiết bị của người dùng có các tính năng tiết kiệm pin tích hợp giúp giảm thiểu mức tiêu thụ pin. Khi hoạt động hết công suất, đài phát thanh không dây sẽ tiêu thụ nhiều năng lượng, nhưng khi không hoạt động hoặc ở chế độ chờ, đài phát thanh sẽ tiêu thụ rất ít năng lượng.

Một yếu tố quan trọng cần nhớ là đài không thể chuyển từ trạng thái chờ sang trạng thái hoạt động đầy đủ ngay lập tức. Có một khoảng thời gian trễ liên quan đến "bật nguồn" đài phát. Vì vậy, pin chuyển từ trạng thái có mức năng lượng cao hơn sang trạng thái năng lượng thấp hơn từ từ để tiết kiệm điện khi không sử dụng trong khi cố gắng giảm thiểu độ trễ liên quan đến "bật nguồn" đài phát.

Máy trạng thái cho vô tuyến mạng 3G thông thường bao gồm ba trạng thái năng lượng:

  • Công suất đầy đủ: Được dùng khi có kết nối, cho phép thiết bị chuyển dữ liệu ở tốc độ cao nhất có thể.
  • Năng lượng thấp: Trạng thái trung gian giúp cắt giảm mức tiêu thụ năng lượng pin khoảng 50%.
  • Chờ: Trạng thái tiêu thụ điện năng tối thiểu trong đó không có kết nối mạng nào đang hoạt động.

Mặc dù cả trạng thái chờ và trạng thái yếu làm tiêu hao pin ít hơn đáng kể, nhưng chúng cũng gây ra độ trễ đáng kể cho các yêu cầu mạng. Quá trình chuyển về trạng thái pin đầy từ trạng thái pin yếu mất khoảng 1,5 giây và quá trình chuyển từ trạng thái chờ sang trạng thái pin đầy có thể mất hơn 2 giây.

Để giảm thiểu độ trễ, máy trạng thái sử dụng độ trễ để hoãn quá trình chuyển đổi sang các trạng thái năng lượng thấp hơn. Hình 1 sử dụng thời gian của AT&T cho một đài 3G thông thường.


Hình 1. Máy trạng thái vô tuyến không dây 3G thông thường.

Máy trạng thái vô tuyến trên từng thiết bị, đặc biệt là chuyển đổi được liên kết độ trễ ("thời gian đuôi") và độ trễ khởi động, sẽ khác nhau tuỳ theo đài không dây sử dụng công nghệ (3G, LTE, 5G, v.v.) và được xác định và định cấu hình bởi mạng của nhà mạng mà thiết bị đang hoạt động.

Trang này mô tả máy trạng thái đại diện cho mạng không dây 3G thông thường dựa trên dữ liệu do AT&T cung cấp. Tuy nhiên, các nguyên tắc chung và phương pháp hay nhất có thể áp dụng cho tất cả các phương thức triển khai đài phát không dây.

Phương pháp này đặc biệt hiệu quả đối với hoạt động duyệt web thông thường trên thiết bị di động vì phương pháp này giúp ngăn chặn độ trễ không mong muốn khi người dùng duyệt web. Tương đối thấp thời gian xem cũng đảm bảo rằng khi một phiên duyệt web kết thúc, đài phát thanh có thể chuyển sang trạng thái năng lượng thấp hơn.

Rất tiếc, phương pháp này có thể dẫn đến các ứng dụng không hiệu quả trên các hệ điều hành điện thoại thông minh hiện đại như Android, trong đó các ứng dụng chạy cả ở nền trước (độ trễ quan trọng) và ở chế độ nền (thời lượng pin được ưu tiên).

Cách ứng dụng tác động đến máy trạng thái radio

Mỗi khi bạn tạo một kết nối mạng mới, đài sẽ chuyển sang trạng thái nguồn đầy đủ. Trong trường hợp máy trạng thái vô tuyến 3G thông thường được mô tả trước đó, nó sẽ vẫn hoạt động hết công suất trong suốt thời gian bạn chuyển, cộng với thêm 5 giây thời gian đuôi — sau đó là 12 giây ở mức năng lượng thấp trạng thái. Vì vậy, đối với thiết bị 3G thông thường, mỗi phiên chuyển dữ liệu sẽ khiến đài phát để tiêu thụ năng lượng trong ít nhất 18 giây.

Trong thực tế, điều này có nghĩa là một ứng dụng chuyển dữ liệu trong một giây, ba lần một phút, sẽ giữ cho đài không dây hoạt động liên tục, di chuyển đài phát trở lại mức nguồn cao ngay khi đang chuyển sang chế độ chờ.


Hình 2. Mức sử dụng năng lượng vô tuyến không dây tương đối để chuyển dữ liệu trong một giây ba lần mỗi phút. Hình không bao gồm "tăng sức mạnh" độ trễ giữa các lần chạy.

Bằng cách so sánh, nếu cùng một ứng dụng đã nhóm các quá trình chuyển dữ liệu, thì việc chạy một chuyển mỗi phút 3 giây, điều này sẽ giúp đài phát luôn ở mức công suất cao tổng cộng chỉ 20 giây mỗi phút. Điều này cho phép đài phát thanh ở chế độ chờ trong 40 giây mỗi phút, giúp giảm đáng kể mức tiêu thụ pin.


Hình 3. Mức sử dụng năng lượng vô tuyến không dây tương đối khi truyền 3 giây chạy một lần mỗi phút.

Kỹ thuật tối ưu hoá

Giờ bạn đã hiểu quyền truy cập mạng ảnh hưởng như thế nào đến thời lượng pin, hãy cùng thảo luận về một vài việc bạn có thể làm để giúp giảm tiêu hao pin, đồng thời cung cấp trải nghiệm người dùng nhanh chóng và linh hoạt.

Gói chuyển dữ liệu

Như đã nêu trong phần trước, hãy nhóm các lần chuyển dữ liệu để bạn chuyển nhiều dữ liệu hơn ít thường xuyên hơn là một trong những cách tốt nhất để cải thiện pin sự hiệu quả.

Tất nhiên, điều này không phải lúc nào cũng thực hiện được nếu ứng dụng của bạn cần nhận hoặc sẽ gửi dữ liệu ngay lập tức để phản hồi hành động của người dùng. Bạn có thể giảm thiểu vấn đề này bằng cách dự đoán và tải trước dữ liệu. Các trường hợp khác, chẳng hạn như gửi nhật ký hoặc số liệu phân tích đến máy chủ và các hoạt động chuyển dữ liệu không khẩn cấp khác do ứng dụng khởi tạo, rất phù hợp với việc tạo lô và gói. Hãy xem phần Tối ưu hoá các tác vụ do ứng dụng khởi tạo để biết các mẹo về cách lên lịch chuyển dữ liệu mạng ở chế độ nền.

Tìm nạp trước dữ liệu

Tìm nạp trước dữ liệu là một cách hiệu quả khác để giảm số lượng phiên chuyển dữ liệu độc lập mà ứng dụng của bạn chạy. Với tính năng tìm nạp trước, khi người dùng thực hiện một hành động trong ứng dụng, ứng dụng sẽ dự đoán dữ liệu nào có nhiều khả năng sẽ cần thiết cho loạt hành động tiếp theo của người dùng và tìm nạp dữ liệu đó trong một luồng dữ liệu, qua một kết nối duy nhất, ở mức công suất tối đa.

Bằng cách tải trước các lượt chuyển, bạn sẽ giảm số lần kích hoạt đài cần thiết để tải dữ liệu xuống. Nhờ đó, bạn không chỉ tiết kiệm thời lượng pin mà còn cải thiện độ trễ, giảm băng thông cần thiết và rút ngắn thời gian tải xuống.

Tính năng tìm nạp trước cũng giúp cải thiện trải nghiệm người dùng bằng cách giảm thiểu độ trễ trong ứng dụng do phải chờ quá trình tải xuống hoàn tất trước khi thực hiện một thao tác hoặc xem dữ liệu.

Sau đây là một ví dụ thực tế.

Trình đọc tin tức

Nhiều ứng dụng tin tức cố gắng giảm băng thông bằng cách chỉ tải xuống các tin bài sau khi danh mục đã được chọn, các bài viết đầy đủ chỉ khi người dùng muốn đọc chúng, và hình thu nhỏ ngay khi chúng cuộn vào khung hiển thị.

Khi sử dụng phương pháp này, đài phát buộc phải duy trì hoạt động trong phần lớn phiên đọc tin tức của người dùng khi họ cuộn qua các dòng tiêu đề, thay đổi danh mục và đọc bài viết. Không chỉ vậy, việc chuyển đổi liên tục giữa các trạng thái năng lượng dẫn đến độ trễ đáng kể khi chuyển đổi danh mục hoặc đọc bài viết.

Một phương pháp tốt hơn là tìm nạp trước một lượng dữ liệu hợp lý khi khởi động, bắt đầu bằng nhóm tiêu đề và hình thu nhỏ tin tức đầu tiên – đảm bảo thời gian khởi động có độ trễ thấp – và tiếp tục với các tiêu đề và hình thu nhỏ còn lại, cũng như văn bản bài viết cho mỗi bài viết có trong ít nhất danh sách tiêu đề chính.

Một cách khác là tìm nạp trước mọi tiêu đề, hình thu nhỏ, văn bản bài viết và thậm chí có thể là hình ảnh đầy đủ của bài viết—thường nằm trên nền lịch trình định trước. Phương pháp này rủi ro chi tiêu đáng kể băng thông và thời lượng pin tải xuống nội dung không bao giờ được sử dụng, vì vậy, bạn nên triển khai thời lượng pin hãy thận trọng.

Các yếu tố cần cân nhắc khác

Mặc dù việc tải trước dữ liệu mang lại nhiều lợi ích, nhưng việc tải trước dữ liệu quá mức cũng làm tăng nguy cơ tiêu hao pin và sử dụng băng thông, cũng như hạn mức tải xuống bằng cách tải dữ liệu không dùng đến. Bạn cũng cần đảm bảo rằng tính năng tải trước không làm chậm quá trình khởi động ứng dụng trong khi ứng dụng chờ quá trình tải trước hoàn tất. Trong thực tế, điều đó có thể có nghĩa là xử lý dữ liệu theo trình tự hoặc bắt đầu các lượt chuyển liên tiếp được ưu tiên để dữ liệu cần thiết cho việc khởi động ứng dụng được tải xuống và xử lý trước tiên.

Mức độ tích cực tải trước dữ liệu phụ thuộc vào kích thước của dữ liệu đang được tải xuống và khả năng dữ liệu đó được sử dụng. Dưới đây là hướng dẫn sơ bộ, dựa trên máy trạng thái được mô tả trước đó, đối với dữ liệu có 50% khả năng được sử dụng trong phiên người dùng hiện tại, bạn thường có thể tải trước trong khoảng 6 giây (khoảng 1-2 megabyte) trước khi chi phí tiềm ẩn của việc tải dữ liệu không sử dụng xuống khớp với mức tiết kiệm tiềm năng của việc không tải dữ liệu đó xuống.

Nói chung, bạn nên tải trước dữ liệu để chỉ cần bắt đầu tải xuống một lần nữa sau mỗi 2 đến 5 phút và theo thứ tự từ 1 đến 5 megabyte.

Theo nguyên tắc này, các tệp tải xuống có kích thước lớn (chẳng hạn như các tệp video) phải được tải xuống theo từng phần ở khoảng thời gian đều đặn (2 đến 5 phút một lần), hiệu quả chỉ tìm nạp trước dữ liệu video có thể sẽ xem được trong vài phút tới.

Một giải pháp là lên lịch tải xuống toàn bộ chỉ khi kết nối với Wi-Fi và có thể chỉ khi thiết bị đang sạc. WorkManager API hỗ trợ chính xác trường hợp sử dụng này, cho phép bạn hạn chế công việc ở chế độ nền cho đến khi thiết bị đáp ứng các tiêu chí do nhà phát triển chỉ định, chẳng hạn như đang sạc và kết nối với Wi-Fi.

Kiểm tra khả năng kết nối trước khi yêu cầu

Tìm kiếm tín hiệu di động là một trong những thao tác tiêu hao năng lượng nhất trên thiết bị di động của bạn. Phương pháp hay nhất cho các yêu cầu do người dùng khởi tạo là trước tiên, hãy kiểm tra kết nối bằng ConnectivityManager, như trong phần Theo dõi trạng thái kết nối và đo lượng dữ liệu kết nối. Nếu không có mạng, ứng dụng có thể tiết kiệm pin bằng cách không buộc đài di động tìm kiếm. Sau đó, bạn có thể lên lịch và thực hiện yêu cầu này cùng với các yêu cầu khác theo lô khi tạo kết nối.

Kết nối với bể bơi

Ngoài việc tạo lô và tải trước, bạn có thể sử dụng thêm một chiến lược khác là gộp các kết nối mạng của ứng dụng.

Việc sử dụng lại các kết nối mạng hiện có thường hiệu quả hơn so với việc bắt đầu các kết nối mới. Việc sử dụng lại các kết nối cũng cho phép mạng phản ứng thông minh hơn với tình trạng tắc nghẽn và các vấn đề liên quan đến dữ liệu mạng.

HttpURLConnection và hầu hết các ứng dụng HTTP, chẳng hạn như OkHttp, bật tính năng gộp kết nối theo mặc định và sử dụng lại cùng một kết nối cho nhiều yêu cầu.

Tổng kết và hướng đến tương lai

Trong phần này, bạn đã tìm hiểu nhiều về vô tuyến không dây và một số chiến lược mà bạn có thể áp dụng rộng rãi nhằm cung cấp trải nghiệm người dùng nhanh chóng, thích ứng trong khi giúp giảm hiện tượng tiêu hao pin.

Trong phần tiếp theo, chúng ta sẽ xem xét chi tiết ba loại tương tác mạng khác nhau phổ biến với hầu hết các ứng dụng. Bạn sẽ tìm hiểu các yếu tố thúc đẩy các loại mã này cũng như các kỹ thuật và API hiện đại để quản lý tương tác một cách hiệu quả.