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

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

Phần này giới thiệu về máy trạng thái radio 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ô hình đó. Sau đó, giải pháp này cung cấp một số kỹ thuật mà khi làm theo, sẽ giúp giảm thiểu ảnh hưởng của mức tiêu thụ dữ liệu của ứng dụng đến pin.

Máy trạng thái radio

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

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

Máy trạng thái của một đài phát thanh qua mạng 3G thông thường bao gồm 3 trạng thái năng lượng:

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

Mặc dù trạng thái thấp và trạng thái chờ tiêu hao ít pin hơn đáng kể, nhưng chúng cũng gây ra độ trễ đáng kể đối với các yêu cầu mạng. Việc chuyển từ trạng thái thấp sang trạng thái đầy đủ sẽ mất khoảng 1,5 giây, còn quá trình chuyển từ chế độ chờ sang trạng thái bật đầ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ễ để trì hoãn quá trình chuyển đổi sang 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 mỗi thiết bị, cụ thể là độ trễ chuyển đổi liên quan ("thời gian chờ") và độ trễ khởi động sẽ thay đổi tuỳ theo công nghệ vô tuyến không dây đang sử dụng (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 nơi thiết bị đang hoạt động.

Trang này mô tả máy trạng thái đại diện cho một đài phát thanh 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 kết quả hay nhất vẫn có thể áp dụng cho tất cả các cách triển khai radio 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ì nó giúp ngăn chặn tình trạng chờ không mong muốn khi người dùng duyệt web. Thời gian chờ tương đối thấp cũng đảm bảo rằng sau khi một phiên duyệt web kết thúc, đài có thể chuyển sang trạng thái năng lượng thấp hơn.

Thật không may, 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 hiện đại dành cho điện thoại thông minh như Android, nơi ứng dụng chạy cả ở nền trước (trong đó độ trễ là quan trọng) và trong nền (nơi ưu tiên thời lượng pin).

Tác động của ứng dụ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 phát 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 đó, máy sẽ vẫn ở mức công suất tối đa trong suốt thời gian chuyển (cộng thêm 5 giây theo thời gian chờ), sau đó là 12 giây ở trạng thái năng lượng thấp. Vì vậy, đối với một thiết bị 3G thông thường, mỗi phiên chuyển dữ liệu sẽ khiến đài phát ra 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 1 giây (3 lần/phút) sẽ giúp đài không dây hoạt động vĩnh viễn và chuyển thiết bị về mức công suất cao ngay khi chuyển sang chế độ chờ.


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

So sánh, nếu cùng một ứng dụng đã đóng gói hoạt động chuyển dữ liệu, chạy một lần chuyển 3 giây mỗi phút, thì điều này sẽ giữ đài phát ở trạng thái năng lượng cao trong tổng cộng chỉ 20 giây mỗi phút. Điều này sẽ cho phép đài ở chế độ chờ 40 giây/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 tương đối không dây trong quá trình chuyển dữ liệu ba giây chạy mỗi phút một lần.

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

Bây 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 trao đổi về một số việc bạn có thể làm để giúp giảm tiêu hao pin trong khi vẫn cung cấp trải nghiệm người dùng nhanh chóng và linh hoạt.

Chuyển dữ liệu theo gói

Như đã nêu trong phần trước, việc nhóm các hoạt động chuyển dữ liệu của bạn để bạn giảm tần suất chuyển nhiều dữ liệu hơn là một trong những cách tốt nhất để cải thiện hiệu suất pin.

Tất nhiên, không phải lúc nào điều này cũng có thể thực hiện được nếu ứng dụng của bạn cần nhận hoặc gửi dữ liệu ngay lập tức để phản hồi một hành động của người dùng. Bạn có thể giảm thiểu điều này bằng cách dự đoán và tìm nạp 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ác không khẩn cấp do ứng dụng khởi tạo, rất phù hợp để tạo lô và nhóm. 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 lên lịch chuyển 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 nhấ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 gói thông qua một kết nối duy nhất ở mức tối đa.

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

Tính năng tìm nạp trước cũng 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 quá trình tải xuống hoàn tất trước khi thực hiện một hành động hoặc xem dữ liệu.

Dưới đây là một ví dụ thực tế.

Máy đọ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 dòng tiêu đề xuống sau khi đã chọn một danh mục, bài viết đầy đủ chỉ khi người dùng muốn đọc và hình thu nhỏ ngay khi cuộn vào chế độ xem.

Khi sử dụng phương pháp này, đài bắ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 tiêu đề, thay đổi danh mục và đọc bài viết. Không chỉ vậy, việc liên tục chuyển đổi giữa các trạng thái năng lượng còn 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 hiệu quả 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 với loạt 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 dòng 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 hiện có trong ít nhất là 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à cả ảnh đầy đủ của bài viết – thường ở chế độ nền theo lịch biểu xác định trước. Phương pháp này có nguy cơ tiêu tốn băng thông đáng kể và thời lượng pin để tải nội dung chưa từng được sử dụng xuống. Vì vậy, bạn nên thận trọng khi triển khai phương pháp này.

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

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

Mức độ mạnh mẽ khi tìm nạp trước dữ liệu phụ thuộc vào kích thước của dữ liệu được tải xuống và khả năng dữ liệu đó được sử dụng. Theo 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% cơ hội được sử dụng trong phiên người dùng hiện tại, bạn thường có thể tìm nạp trước trong khoảng 6 giây (khoảng 1-2 megabyte) trước khi chi phí có thể 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 có thể xảy ra do không tải dữ liệu đó xuống.

Nói chung, bạn nên tìm nạp trước dữ liệu để chỉ cần 2 đến 5 phút một lần tải xuống, 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ư tệp video) sẽ được tải xuống theo từng phần theo định kỳ (2 đến 5 phút một lần), chỉ tìm nạp trước hiệu quả dữ liệu video có thể sẽ được xem trong vài phút tới.

Một giải pháp là đặt lịch tải xuống toàn bộ chỉ khi được 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 trong 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ư việc sạc và kết nối với Wi-Fi.

Kiểm tra kết nối trước khi gửi yêu cầu

Tìm kiếm tín hiệu di động là một trong những hoạt động làm tiêu hao pin nhiều nhất trên thiết bị di động. Phương pháp hay nhất cho các yêu cầu do người dùng đưa ra là trước tiên kiểm tra kết nối bằng ConnectivityManager, như minh hoạ trong phần Theo dõi trạng thái kết nối và định mức 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 radio trên thiết bị di động phải tìm kiếm. Sau đó, yêu cầu này có thể được lên lịch và thực hiện theo lô cùng với các yêu cầu khác khi có kết nối.

Đường kết nối hồ bơi

Ngoài việc phân lô và tìm nạp trước, một chiến lược khác cũng có thể hữu ích, đó là gộp các kết nối mạng của ứng dụng.

Nhìn chung, việc sử dụng lại kết nối mạng hiện có sẽ hiệu quả hơn so với việc bắt đầu kết nối mới. Việc sử dụng lại kết nối cũng giúp mạng phản ứng nhanh hơn với tình trạng tắc nghẽn và các vấn đề về dữ liệu mạng liên quan.

HttpURLConnection và hầu hết ứ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óm tắt và hướng đến tương lai

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

Trong phần tiếp theo, chúng ta sẽ xem xét chi tiết về 3 loại tương tác mạng riêng biệt phổ biến với hầu hết các ứng dụng. Bạn sẽ tìm hiểu trình điều khiển cho từng loại này, cũng như các kỹ thuật và API hiện đại để quản lý các lượt tương tác này một cách hiệu quả.