Chế độ tạm ngưng

Trạng thái nguồn của SoC

Các trạng thái nguồn của hệ thống trên một chip (SoC) là: bật, rảnh và tạm ngưng. "Bật" là khi SoC đang chạy. "Rảnh" là chế độ tiết kiệm điện trung bình, trong đó SoC được cấp nguồn nhưng không thực hiện bất kỳ tác vụ nào. "Tạm ngưng" là chế độ tiết kiệm pin, trong đó SoC không được cấp nguồn. Mức tiêu thụ năng lượng của thiết bị ở chế độ này thường thấp hơn 100 lần so với ở chế độ "Bật".

Cảm biến không đánh thức

Cảm biến không đánh thức là những cảm biến không ngăn SoC chuyển sang chế độ tạm ngưng và không đánh thức SoC để báo cáo dữ liệu. Cụ thể, trình điều khiển không được phép giữ khoá chế độ thức. Ứng dụng có trách nhiệm duy trì một phần khoá chế độ thức nếu muốn nhận sự kiện từ các cảm biến không đánh thức trong khi màn hình tắt. Trong khi SoC ở chế độ tạm ngưng, các cảm biến phải tiếp tục hoạt động và tạo sự kiện, được đưa vào FIFO phần cứng. (Xem phần Gói hàng để biết thêm thông tin chi tiết.) Các sự kiện trong FIFO được phân phối đến các ứng dụng khi SoC thức dậy. Nếu FIFO quá nhỏ để lưu trữ tất cả sự kiện, thì các sự kiện cũ sẽ bị mất; dữ liệu cũ nhất sẽ bị loại bỏ để chứa dữ liệu mới nhất. Trong trường hợp cực đoan khi FIFO không tồn tại, tất cả các sự kiện được tạo khi SoC ở chế độ tạm ngưng sẽ bị mất. Một ngoại lệ là sự kiện mới nhất từ mỗi cảm biến thay đổi: sự kiện cuối cùng phải được lưu bên ngoài FIFO để không bị mất.

Ngay khi SoC thoát khỏi chế độ tạm ngưng, tất cả sự kiện từ FIFO sẽ được báo cáo và các hoạt động sẽ tiếp tục như bình thường.

Các ứng dụng sử dụng cảm biến không đánh thức phải giữ khoá chế độ thức để đảm bảo hệ thống không chuyển sang trạng thái tạm ngưng, huỷ đăng ký khỏi cảm biến khi không cần hoặc dự kiến sẽ mất các sự kiện trong khi SoC ở chế độ tạm ngưng.

Cảm biến đánh thức

Trái ngược với cảm biến không đánh thức, cảm biến đánh thức đảm bảo rằng dữ liệu của chúng được phân phối độc lập với trạng thái của SoC. Khi SoC đang thức, cảm biến đánh thức sẽ hoạt động như cảm biến không đánh thức. Khi SoC ở trạng thái ngủ, các cảm biến đánh thức phải đánh thức SoC để phân phối sự kiện. Các ứng dụng này vẫn phải cho phép SoC chuyển sang chế độ tạm ngưng, nhưng cũng phải đánh thức SoC khi cần báo cáo một sự kiện. Tức là cảm biến phải đánh thức SoC và phân phối các sự kiện trước khi độ trễ báo cáo tối đa đã trôi qua hoặc FIFO phần cứng đã đầy. Hãy xem phần Gộp nhóm để biết thêm thông tin chi tiết.

Để đảm bảo các ứng dụng có thời gian nhận sự kiện trước khi SoC quay lại trạng thái ngủ, trình điều khiển phải giữ "khoá chế độ thức hết thời gian chờ" trong 200 mili giây mỗi khi một sự kiện được báo cáo. Tức là SoC không được phép chuyển về trạng thái ngủ trong 200 mili giây sau khi có một ngắt đánh thức. Yêu cầu này sẽ biến mất trong một bản phát hành Android trong tương lai và chúng ta cần khoá chế độ thức hết thời gian chờ này cho đến lúc đó.

Làm cách nào để xác định cảm biến đánh thức và không đánh thức?

Cho đến KitKat, việc một cảm biến là cảm biến đánh thức hay không đánh thức là do loại cảm biến quyết định: hầu hết là cảm biến không đánh thức, ngoại trừ cảm biến độ gầntrình phát hiện chuyển động đáng kể.

Kể từ phiên bản L, một cờ trong định nghĩa cảm biến sẽ chỉ định liệu một cảm biến nhất định có phải là cảm biến đánh thức hay không. Hầu hết các cảm biến có thể được xác định bằng các cặp biến thể chế độ thức và không thức của cùng một cảm biến. Trong trường hợp này, các cảm biến phải hoạt động như hai cảm biến độc lập, không tương tác với nhau. Hãy xem phần Tương tác để biết thêm thông tin chi tiết.

Trừ phi có quy định khác trong định nghĩa loại cảm biến, bạn nên triển khai một cảm biến đánh thức và một cảm biến không đánh thức cho mỗi loại cảm biến được liệt kê trong phần Loại cảm biến. Trong mỗi định nghĩa loại cảm biến, hãy xem cảm biến nào (đánh thức hoặc không đánh thức) sẽ được SensorManager.getDefaultSensor(sensorType) trả về. Đây là cảm biến mà hầu hết các ứng dụng sẽ sử dụng.