Các tính năng và API của Android 10

Android 10 mang đến các tính năng và chức năng tuyệt vời cho người dùng cũng như nhà phát triển. Tài liệu này nêu bật những tính năng dành cho nhà phát triển.

Để tìm hiểu về các API, hãy đọc báo cáo điểm khác biệt về API hoặc truy cập Tài liệu tham khảo về API của Android – tìm các API đã được "thêm vào API cấp 29". Ngoài ra, hãy nhớ xem các thay đổi về hành vi của Android 10 (đối với ứng dụng nhắm đến API cấp 29tất cả ứng dụng), cũng như thay đổi về quyền riêng tư, để tìm hiểu những thay đổi của nền tảng có thể ảnh hưởng đến ứng dụng của bạn.

Các tính năng nâng cao về bảo mật

Android 10 giới thiệu một số tính năng bảo mật được tóm tắt trong các phần sau.

Cải thiện hộp thoại xác thực bằng sinh trắc học

Android 10 giới thiệu các điểm cải tiến sau đây cho tính năng hỗ trợ xác thực bằng hệ thống nhận dạng sinh trắc học:

  • Kiểm tra khả năng xác thực bằng sinh trắc học.
  • Cơ chế dự phòng cho phép người dùng xác thực bằng mã PIN, hình mở khoá hoặc mật khẩu của thiết bị nếu họ không thể xác thực bằng thông tin đầu vào sinh trắc học.
  • Một gợi ý cho hệ thống biết không yêu cầu người dùng xác nhận sau khi người dùng đã xác thực bằng một phương thức sinh trắc học ngầm ẩn. Ví dụ: bạn có thể cho hệ thống biết rằng bạn không cần xác nhận thêm sau khi người dùng xác thực bằng tính năng xác thực khuôn mặt.

Chạy mã DEX đã nhúng ngay từ APK

Kể từ Android 10, bạn có thể yêu cầu nền tảng này chạy mã DEX được nhúng trực tiếp tại tệp APK của ứng dụng. Lựa chọn này có thể giúp ngăn chặn một cuộc tấn công nếu kẻ tấn công tìm được cách để can thiệp vào mã đã biên dịch cục bộ trên thiết bị.

Để biết thêm thông tin, hãy xem bài viết Chạy mã DEX nhúng ngay từ APK.

Hỗ trợ TLS 1.3

Android 10 thêm tính năng hỗ trợ cho TLS 1.3. TLS 1.3 là bản sửa đổi lớn đối với tiêu chuẩn TLS, bao gồm các lợi ích về hiệu suất và khả năng bảo mật nâng cao. Các điểm chuẩn của chúng tôi chỉ ra rằng các kết nối bảo mật có thể được thiết lập nhanh hơn 40% với TLS 1.3 so với TLS 1.2.

Để biết thêm thông tin chi tiết về cách chúng tôi triển khai TLS 1.3, hãy xem phần về TLS trong phần các thay đổi về hành vi đối với tất cả ứng dụng.

API Conscrypt công khai

Kể từ Android 10, trình cung cấp dịch vụ bảo mật Conscrypt sẽ có một API công khai cho chức năng TLS.

Tập hợp các lớp trong android.net.ssl chứa các phương thức tĩnh để truy cập chức năng không có trong các API javax.net.ssl chung. Tên của các lớp này có thể được suy ra là số nhiều của lớp javax.net.ssl tương ứng. Ví dụ: mã hoạt động trên các thực thể của javax.net.ssl.SSLSocket có thể sử dụng các phương thức từ SSLSockets.

Tính năng kết nối

Android 10 có một số điểm cải tiến liên quan đến kết nối mạng và khả năng kết nối.

API kết nối mạng Wi-Fi

Android 10 bổ sung tính năng hỗ trợ kết nối ngang hàng. Tính năng này cho phép ứng dụng của bạn nhắc người dùng thay đổi điểm truy cập mà thiết bị đang kết nối bằng cách sử dụng WifiNetworkSpecifier để mô tả các thuộc tính của mạng được yêu cầu. Kết nối ngang hàng được dùng cho các mục đích không cung cấp mạng, chẳng hạn như định cấu hình tự khởi động cho các thiết bị phụ như Chromecast và phần cứng Google Home.

Để biết thêm thông tin, hãy xem Wi-Fi Network Request API cho kết nối ngang hàng.

API đề xuất mạng Wi-Fi

Android 10 hỗ trợ thêm cho ứng dụng của bạn để nhắc người dùng kết nối với một điểm truy cập Wi-Fi. Bạn có thể đưa ra các đề xuất về mạng mà bạn sẽ kết nối. Cuối cùng, nền tảng sẽ chọn điểm truy cập cần chấp nhận dựa trên thông tin đầu vào từ ứng dụng của bạn và các ứng dụng khác.

Để biết thêm thông tin về tính năng này, hãy xem phần Đề xuất Wi-Fi.

Cải tiến chế độ hiệu suất cao và độ trễ thấp của Wi-Fi

Android 10 cho phép bạn cung cấp gợi ý cho modem cơ bản để giảm thiểu độ trễ.

Android 10 mở rộng API khoá Wi-Fi để hỗ trợ hiệu quả chế độ hiệu suất cao và chế độ độ trễ thấp. Tính năng tiết kiệm điện năng Wi-Fi bị tắt cho chế độ hiệu suất cao và độ trễ thấp. Ngoài ra, tính năng tối ưu hoá độ trễ hơn nữa có thể được bật ở chế độ độ trễ thấp, tuỳ thuộc vào sự hỗ trợ của modem.

Chế độ độ trễ thấp chỉ được bật khi ứng dụng có được khoá đang chạy ở nền trước và màn hình đang bật. Chế độ độ trễ thấp đặc biệt hữu ích với các ứng dụng trò chơi dành cho thiết bị di động theo thời gian thực.

Hoạt động tra cứu chuyên biệt trong trình phân giải DNS

Android 10 bổ sung tính năng hỗ trợ gốc cho các hoạt động tra cứu DNS chuyên biệt bằng cách sử dụng cả tra cứu văn bản thô lẫn chế độ DNS qua TLS. Trước đây, trình phân giải hệ thống tên miền (DNS) của nền tảng chỉ hỗ trợ các bản ghi A và AAAA, cho phép tra cứu địa chỉ IP liên kết với tên, nhưng không hỗ trợ loại bản ghi nào khác. API DnsResolver cung cấp hoạt động phân giải chung không đồng bộ, cho phép bạn tra cứu SRV, NAPTR và các loại bản ghi khác. Lưu ý rằng việc phân tích cú pháp phản hồi sẽ do ứng dụng thực hiện.

Đối với các ứng dụng dựa trên NDK, hãy xem android_res_nsend.

Kết nối Wi-Fi dễ dàng

Android 10 cho phép bạn sử dụng tính năng Kết nối dễ dàng để cung cấp thông tin đăng nhập Wi-Fi cho một thiết bị ngang hàng để thay thế cho WPS đã ngừng hoạt động. Các ứng dụng có thể tích hợp Easy Connect vào quy trình thiết lập và cấp phép bằng cách sử dụng ý định ACTION_PROCESS_WIFI_EASY_CONNECT_URI.

Để biết thêm thông tin về tính năng này, hãy xem bài viết Kết nối dễ dàng qua Wi-Fi.

API kết nối Wi-Fi Direct

Các lớp API WifiP2pConfigWifiP2pManager có bản cập nhật trong Android 10 để hỗ trợ khả năng thiết lập kết nối nhanh cho Wi-Fi Direct bằng cách sử dụng thông tin xác định trước. Thông tin này được chia sẻ qua một kênh phụ, chẳng hạn như Bluetooth hoặc NFC.

Mã mẫu sau đây cho biết cách tạo nhóm bằng thông tin được xác định trước:

Kotlin

val manager = getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager
val channel = manager.initialize(this, mainLooper, null)

// prefer 5G band for this group
val config = WifiP2pConfig.Builder()
    .setNetworkName("networkName")
    .setPassphrase("passphrase")
    .enablePersistentMode(false)
    .setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ)
    .build()

// create a non-persistent group on 5GHz
manager.createGroup(channel, config, null)

Java

WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
Channel channel = manager.initialize(this, getMainLooper(), null);

// prefer 5G band for this group
WifiP2pConfig config = new WifiP2pConfig.Builder()
.setNetworkName("networkName")
.setPassphrase("passphrase")
.enablePersistentMode(false)
.setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ)
.build();

// create a non-persistent group on 5GHz
manager.createGroup(channel, config, null);

Để tham gia một nhóm bằng thông tin xác thực, hãy thay thế manager.createGroup() bằng nội dung sau:

Kotlin

manager.connect(channel, config, null)

Java

manager.connect(channel, config, null);

Các kênh định hướng kết nối Bluetooth LE (CoC)

Android 10 cho phép ứng dụng của bạn dùng các kết nối BLE CoC để chuyển các luồng dữ liệu lớn hơn giữa 2 thiết bị BLE. Giao diện này tóm tắt Bluetooth và cơ chế kết nối để đơn giản hoá quá trình triển khai.

Các tính năng điện thoại

Android 10 có một số điểm cải tiến liên quan đến điện thoại.

Cải thiện chất lượng cuộc gọi

Android 10 bổ sung khả năng thu thập thông tin về chất lượng của các lệnh gọi Hệ thống con đa phương tiện IP (IMS) đang diễn ra, bao gồm cả chất lượng đến và đi qua mạng, trên các thiết bị hỗ trợ tính năng này.

Sàng lọc cuộc gọi và nhận dạng người gọi

Android 10 cung cấp cho ứng dụng một phương thức để xác định các cuộc gọi không có trong sổ địa chỉ của người dùng là cuộc gọi có khả năng làm phiền, đồng thời để ngầm từ chối các cuộc gọi làm phiền thay cho người dùng. Thông tin về các lệnh gọi bị chặn này được ghi lại dưới dạng lệnh gọi bị chặn trong nhật ký cuộc gọi để mang lại sự minh bạch hơn cho người dùng khi họ bị thiếu lệnh gọi. Việc sử dụng API này giúp loại bỏ yêu cầu phải lấy quyền READ_CALL_LOG từ người dùng để cung cấp chức năng sàng lọc cuộc gọi và nhận dạng người gọi.

API dịch vụ chuyển hướng cuộc gọi

Android 10 thay đổi cách xử lý ý định cuộc gọi. Ngừng sử dụng thông báo truyền tin NEW_OUTGOING_CALL và thay thế bằng API CallRedirectionService. API CallRedirectionService cung cấp các giao diện giúp bạn sửa đổi các lệnh gọi đi do nền tảng Android thực hiện. Ví dụ: các ứng dụng bên thứ ba có thể huỷ các cuộc gọi và định tuyến lại các cuộc gọi đó qua VoIP.

Cải tiến tính năng tạo tệp trên bộ nhớ ngoài

Ngoài việc ra mắt bộ nhớ có giới hạn, Android 10 còn bổ sung các tính năng sau liên quan đến bộ nhớ ngoài:

  • Bạn có thể dùng cờ IS_PENDING để cấp cho ứng dụng quyền truy cập độc quyền vào tệp nội dung nghe nhìn khi tệp đó được ghi vào ổ đĩa.
  • Nếu biết một vị trí cụ thể cần lưu trữ các tệp, bạn có thể cung cấp cho hệ thống gợi ý về vị trí lưu trữ các tệp mới ghi.
  • Mỗi thiết bị lưu trữ bên ngoài đều có một tên ổ đĩa duy nhất.

Nội dung đa phương tiện và đồ hoạ

Android 10 giới thiệu các API cũng như tính năng mới sau đây về nội dung đa phương tiện và đồ hoạ:

Chia sẻ đầu vào âm thanh

Android 10 bổ sung khả năng cho hai ứng dụng chia sẻ đồng thời đầu vào âm thanh. Để biết đầy đủ thông tin, hãy xem bài viết Chia sẻ đầu vào âm thanh.

Ghi lại quá trình phát âm thanh

Android 10 cho phép một ứng dụng ghi lại âm thanh phát từ các ứng dụng khác. Để biết đầy đủ thông tin, hãy xem bài viết Ghi lại quá trình phát lại.

Thanh tua trong thông báo MediaStyle

Kể từ Android 10, thông báo của MediaStyle sẽ hiển thị thanh tua. Thanh tua cho biết tiến trình phát từ PlaybackState.getPosition() và trong một số trường hợp, bạn có thể dùng thanh tua để tìm một vị trí trong chương trình phát. Giao diện và hành vi của thanh tua được kiểm soát bởi các quy tắc sau:

  • Thanh tua xuất hiện nếu có một MediaSession đang hoạt động và thời lượng của thanh tìm kiếm này (do MediaMetadata.METADATA_KEY_DURATION chỉ định) lớn hơn 0. Điều này có nghĩa là thanh này không xuất hiện đối với các sự kiện phát trực tiếp không xác định như sự kiện phát trực tiếp và chương trình phát sóng.
  • Nếu phiên này triển khai ACTION_SEEK_TO, thì người dùng có thể kéo thanh tua để điều khiển vị trí phát.

API MIDI gốc

API MIDI gốc trên Android (AMidi) cho phép các nhà phát triển ứng dụng gửi và nhận dữ liệu MIDI bằng mã C/C++, tích hợp chặt chẽ hơn với logic kiểm soát/âm thanh C/C++ và giảm thiểu nhu cầu sử dụng JNI.

Để biết thêm thông tin, hãy xem bài viết API MIDI gốc của Android.

Cải tiến MediaCodecInfo

Android 10 thêm các phương thức vào MediaCodecInfo để tiết lộ thêm thông tin về một bộ mã hoá và giải mã.

Để biết thêm thông tin, hãy xem bài viết Bộ mã hoá và giải mã nội dung nghe nhìn.

API Nhiệt

Khi trở nên quá nóng, thiết bị có thể điều tiết CPU và/hoặc GPU, gây ảnh hưởng không mong muốn đến ứng dụng và trò chơi. Các ứng dụng sử dụng đồ hoạ phức tạp, tác vụ tính toán nặng hoặc hoạt động mạng được duy trì liên tục có nhiều khả năng gặp sự cố hơn. Những ứng dụng đó có thể khác nhau giữa các thiết bị dựa trên tần số của chipset và lõi, mức độ tích hợp cũng như yếu tố đóng gói và kiểu dáng thiết bị.

Trên Android 10, các ứng dụng và trò chơi có thể sử dụng API Nhiệt để theo dõi các thay đổi trên thiết bị và hành động để duy trì mức sử dụng điện năng thấp hơn nhằm khôi phục nhiệt độ bình thường. Các ứng dụng đăng ký trình nghe trong PowerManager, qua đó hệ thống báo cáo trạng thái nhiệt đang diễn ra, từ nhẹ và trung bình đến nghiêm trọng, nghiêm trọng, khẩn cấp và tắt.

Khi thiết bị báo cáo ứng suất nhiệt, ứng dụng và trò chơi có thể trợ giúp bằng cách dừng các hoạt động đang diễn ra để giảm mức sử dụng năng lượng theo nhiều cách. Ví dụ: ứng dụng truyền trực tuyến có thể làm giảm độ phân giải/tốc độ bit hoặc lưu lượng truy cập mạng, ứng dụng máy ảnh có thể tắt đèn flash hoặc tính năng nâng cao hình ảnh chuyên sâu, trò chơi có thể giảm tốc độ khung hình hoặc phân bố đa giác, ứng dụng đa phương tiện có thể giảm âm lượng loa và ứng dụng bản đồ có thể tắt GPS.

API nhiệt yêu cầu một lớp HAL mới cho thiết bị. Lớp này hiện được hỗ trợ trên các thiết bị Pixel chạy Android 10 và chúng tôi đang làm việc với các đối tác sản xuất thiết bị để hỗ trợ rộng rãi cho hệ sinh thái nhanh nhất có thể.

Máy ảnh và hình ảnh

Android 10 giới thiệu các tính năng mới liên quan đến máy ảnh và hình ảnh như sau:

Hỗ trợ máy ảnh đơn sắc

Android 9 (API cấp 28) lần đầu ra mắt tính năng máy ảnh đơn sắc. Android 10 bổ sung một số cải tiến để hỗ trợ máy ảnh đơn sắc:

  • Hỗ trợ định dạng luồng Y8 giúp cải thiện hiệu quả sử dụng bộ nhớ.
  • Hỗ trợ chụp DNG đơn sắc thô.
  • Giới thiệu bảng liệt kê MONO và NIR CFA để phân biệt giữa máy ảnh đơn sắc thông thường và máy ảnh hồng ngoại gần.

Bạn có thể sử dụng tính năng này để chụp hình ảnh đơn sắc gốc. Một thiết bị nhiều camera hợp lý có thể sử dụng máy ảnh đơn sắc làm camera phụ vật lý để đạt được chất lượng hình ảnh tốt hơn trong điều kiện ánh sáng yếu.

Định dạng độ sâu động

Kể từ Android 10, máy ảnh có thể lưu trữ dữ liệu độ sâu của hình ảnh trong một tệp riêng bằng một giản đồ mới có tên là Định dạng độ sâu động (DDF). Các ứng dụng có thể yêu cầu cả hình ảnh JPG và siêu dữ liệu về chiều sâu của hình ảnh đó, dùng thông tin đó để áp dụng mọi độ mờ mong muốn trong quá trình xử lý hậu kỳ mà không cần sửa đổi dữ liệu hình ảnh gốc.

Để đọc thông số kỹ thuật cho định dạng này, vui lòng xem phần Định dạng chiều sâu động.

Định dạng tệp hình ảnh hiệu quả cao

Định dạng Tệp hình ảnh hiệu quả cao (HEIF) là định dạng hình ảnh và video tiêu chuẩn mang đến phương thức mã hoá chất lượng cao hơn và kích thước tệp nhỏ hơn so với các định dạng tệp khác.

Để biết thêm thông tin về định dạng tệp, hãy xem bài viết HEIC.

Cải tiến về tính năng nhiều máy ảnh

Android 10 cải thiện việc hợp nhất nhiều máy ảnh thành một máy ảnh logic duy nhất, một tính năng được giới thiệu trong Android 9 (API cấp 28). Các đoạn mã sau đây được thêm vào API Camera2:

  • isSessionConfigurationSupported(SessionConfiguration sessionConfig) – cho phép bạn truy vấn xem liệu có thể sử dụng cấu hình phiên đã truyền để tạo phiên chụp ảnh hay không.

  • LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID – cho phép bạn xác định mã nhận dạng của máy ảnh thực đang hoạt động sao lưu thiết bị máy ảnh logic. Bạn có thể sử dụng các mã nhận dạng được trả về để yêu cầu luồng logic và luồng camera phụ thực tế nhằm đạt được hiệu quả sử dụng điện cao hơn.

API dịch vụ hỗ trợ tiếp cận

Android 10 ra mắt các API và tính năng dịch vụ hỗ trợ tiếp cận mới sau đây:

Cờ khoá truy cập AccessibilityNodeInfo

Kể từ Android 10, bạn có thể gọi isTextEntryKey() để xác định xem một AccessibilityNodeInfo nhất định có đại diện cho phím nhập văn bản thuộc bàn phím hoặc bàn phím hay không.

Phản hồi bằng giọng nói trong hộp thoại hỗ trợ tiếp cận

Trong trường hợp người dùng cần thực hiện phím tắt hỗ trợ tiếp cận để bắt đầu một dịch vụ hỗ trợ tiếp cận, Android 10 sẽ cho phép hộp thoại đi kèm với lời nhắc chuyển văn bản sang lời nói nếu dịch vụ này yêu cầu.

Phím tắt hỗ trợ tiếp cận khi bật thao tác bằng cử chỉ

Khi bạn bật tính năng thao tác bằng cử chỉ trong Android 10, nút hỗ trợ tiếp cận sẽ không hiển thị hoặc chọn được. Để truy cập vào trình đơn dịch vụ hỗ trợ tiếp cận, người dùng phải thực hiện một trong các cử chỉ sau:

  • Vuốt lên bằng 2 ngón tay.
  • Vuốt lên và giữ bằng 2 ngón tay.

Phím tắt hỗ trợ tiếp cận cho bàn phím thực

Trên Android 10, người dùng có thể kích hoạt phím tắt hỗ trợ tiếp cận trên bàn phím vật lý bằng cách nhấn tổ hợp phím Ctrl+Alt+Z.

Cải tiến bộ điều khiển bàn phím mềm

Trong Android 10, các dịch vụ hỗ trợ tiếp cận có thể yêu cầu hiển thị bàn phím mềm ngay cả khi thiết bị phát hiện thấy bàn phím cứng được đính kèm. Người dùng có thể ghi đè hành vi này.

Thời gian chờ hỗ trợ tiếp cận do người dùng xác định

Android 10 ra mắt API getRecommendedTimeoutMillis(). Phương thức này hỗ trợ thời gian chờ do người dùng xác định cho các phần tử tương tác và không tương tác trên giao diện người dùng. Giá trị trả về chịu ảnh hưởng của cả API dịch vụ hỗ trợ tiếp cận và lựa chọn ưu tiên của người dùng.

Cải tiến tính năng tự động điền

Android 10 có các điểm cải tiến sau đây cho dịch vụ tự động điền.

Các yêu cầu tự động điền liên quan đến khả năng tương thích

Bạn có thể dùng cờ FillRequest.FLAG_COMPATIBILITY_MODE_REQUEST để xác định xem hệ thống đã tạo yêu cầu tự động điền hay chưa thông qua chế độ tương thích.

Lưu đồng thời tên người dùng và mật khẩu

Bạn có thể hỗ trợ các trường hợp mà một ứng dụng dùng nhiều hoạt động để hiện tên người dùng, mật khẩu và các trường khác bằng cách dùng cờ SaveInfo.FLAG_DELAY_SAVE.

Hoạt động tương tác của người dùng với giao diện người dùng Save (Lưu)

Bạn có thể hiện và ẩn trường mật khẩu trong hộp thoại lưu bằng cách thiết lập trình nghe thao tác trên hộp thoại và thay đổi chế độ hiển thị của chế độ xem mật khẩu từ xa tương ứng.

Hỗ trợ cập nhật tập dữ liệu

Tính năng tự động điền có thể cập nhật các mật khẩu hiện tại. Ví dụ: nếu người dùng đã lưu trữ mật khẩu và họ lưu một mật khẩu mới, thì tính năng Tự động điền sẽ nhắc người dùng cập nhật mật khẩu hiện tại thay vì lưu mật khẩu mới.

Cải thiện tính năng Phân loại trường

Android 10 có các điểm cải tiến sau đây cho API Phân loại trường.

Hàm khởi tạo UserData.Builder

Hàm khởi tạo UserData.Builder đã thay đổi để căn chỉnh tốt hơn với mẫu Builder.

Cho phép liên kết một Giá trị với nhiều loại Mã danh mục

Giờ đây, khi sử dụng UserData.Builder trong Android 10, bạn có thể liên kết một giá trị với nhiều loại mã danh mục. Trong các bản phát hành trước, hệ thống sẽ gửi một ngoại lệ nếu giá trị được thêm nhiều lần.

Hỗ trợ tốt hơn cho số thẻ tín dụng

Giờ đây, hoạt động phân loại trường có thể phát hiện các số có 4 chữ số là bốn chữ số cuối của số thẻ tín dụng.

Hỗ trợ phân loại trường dành riêng cho ứng dụng

Android 10 bổ sung FillResponse.setUserData(), cho phép bạn thiết lập dữ liệu người dùng dành riêng cho ứng dụng trong thời lượng của phiên hoạt động. Điều này giúp dịch vụ tự động điền phát hiện các loại cho các trường có nội dung dành riêng cho ứng dụng.

Giao diện người dùng và các chế độ điều khiển hệ thống

Android 10 cung cấp các điểm cải tiến sau đây đối với giao diện người dùng:

Hỗ trợ các giới hạn PopFrame JVMTI

Android 10 hỗ trợ thêm tính năng can_pop_frames trong quá trình triển khai JVMTI Android. Khi gỡ lỗi, tính năng này cho phép bạn chạy lại các hàm sau khi tạm dừng tại một điểm ngắt và điều chỉnh cục bộ, tập lệnh toàn cục hoặc triển khai một hàm. Để biết thêm thông tin, hãy xem trang tham chiếu Khung Pop của Oracle.

API điều khiển nền tảng

Android 10 cung cấp API SurfaceControl để truy cập trình tổng hợp hệ thống ở cấp thấp (SurfaceFlinger). Đối với hầu hết người dùng, SurfaceView là cách phù hợp để tận dụng trình tổng hợp. API SurfaceControl có thể hữu ích trong một số trường hợp nhất định, chẳng hạn như:

  • Đồng bộ hoá nhiều nền tảng
  • Nhúng giao diện trên nhiều quy trình
  • Quản lý vòng đời cấp thấp hơn

API SurfaceControl có trong cả liên kết SDK và NDK. Phương thức triển khai NDK bao gồm một API để trao đổi vùng đệm theo cách thủ công với trình tổng hợp. Đây là một giải pháp thay thế cho những người dùng đã gặp phải các giới hạn của BufferQueue.

Phát hiện trình kết xuất đồ hoạ bị treo WebView

Android 10 giới thiệu lớp trừu tượng WebViewRenderProcessClient mà các ứng dụng có thể dùng để phát hiện xem WebView có phản hồi hay không. Cách sử dụng lớp này:

  1. Xác định lớp con của riêng bạn và triển khai các phương thức onRenderProcessResponsive()onRenderProcessUnresponsive() của lớp con đó.
  2. Đính kèm một thực thể của WebViewRenderProcessClient vào một hoặc nhiều đối tượng WebView.
  3. Nếu WebView không phản hồi, hệ thống sẽ gọi phương thức onRenderProcessUnresponsive() của ứng dụng, truyền WebViewWebViewRenderProcess. (Nếu WebView là quy trình đơn, thì tham số WebViewRenderProcess sẽ rỗng.) Ứng dụng của bạn có thể có biện pháp thích hợp, chẳng hạn như hiển thị hộp thoại cho người dùng hỏi xem họ có muốn tạm dừng quá trình kết xuất hay không.

Nếu WebView vẫn không phản hồi, hệ thống sẽ gọi onRenderProcessUnresponsive() định kỳ (không quá 5 giây một lần), nhưng không thực hiện hành động nào khác. Nếu WebView trở lại trạng thái thích ứng, hệ thống chỉ gọi onRenderProcessResponsive() một lần.

Bảng cài đặt

Android 10 giới thiệu Bảng cài đặt, một API cho phép ứng dụng hiển thị chế độ cài đặt cho người dùng trong bối cảnh ứng dụng. Nhờ đó, người dùng không cần phải chuyển đến phần Cài đặt để thay đổi những thứ như NFC hoặc Dữ liệu di động để sử dụng ứng dụng.

Hình 1. Người dùng cố gắng mở một trang web trong khi thiết bị không kết nối mạng. Chrome bật lên bảng cài đặt Kết nối Internet...

Hình 2. Người dùng có thể bật Wi-Fi và chọn một mạng mà không cần rời khỏi ứng dụng Chrome.

Ví dụ: giả sử một người dùng mở trình duyệt web khi thiết bị của họ đang ở chế độ trên máy bay. Trước Android 10, ứng dụng chỉ có thể hiển thị một thông báo chung yêu cầu người dùng mở phần Cài đặt để khôi phục khả năng kết nối. Với Android 10, ứng dụng trình duyệt có thể hiển thị một bảng điều khiển cùng dòng cho thấy các chế độ kết nối quan trọng, chẳng hạn như chế độ trên máy bay, Wi-Fi (bao gồm cả các mạng lân cận) và dữ liệu di động. Với bảng điều khiển này, người dùng có thể khôi phục khả năng kết nối mà không cần rời khỏi ứng dụng.

Để hiển thị bảng cài đặt, hãy kích hoạt ý định bằng một trong các thao tác Settings.Panel sau:

Kotlin

val panelIntent = Intent(Settings.Panel.settings_panel_type)
startActivityForResult(panelIntent)

Java

Intent panelIntent = new Intent(Settings.Panel.settings_panel_type);
startActivityForResult(panelIntent);

settings_panel_type có thể là một trong những trạng thái sau:

ACTION_INTERNET_CONNECTIVITY
Hiện các chế độ cài đặt liên quan đến kết nối Internet, chẳng hạn như Chế độ trên máy bay, Wi-Fi và Dữ liệu di động.
ACTION_WIFI
Hiển thị các tùy chọn cài đặt Wi-Fi, nhưng không hiển thị các tùy chọn cài đặt kết nối khác. Điều này rất hữu ích đối với các ứng dụng cần kết nối Wi-Fi để tải lên hoặc tải xuống với kích thước lớn.
ACTION_NFC
Hiển thị tất cả chế độ cài đặt liên quan đến giao tiếp phạm vi gần (NFC).
ACTION_VOLUME
Hiện chế độ cài đặt âm lượng cho mọi luồng âm thanh.

Cải thiện tính năng chia sẻ

Android 10 cung cấp một số điểm cải tiến về tính năng chia sẻ:

API lối tắt chia sẻ

API lối tắt chia sẻ sẽ thay thế API chia sẻ trực tiếp.

Thay vì truy xuất kết quả theo nhu cầu, API lối tắt chia sẻ cho phép các ứng dụng xuất bản trước mục tiêu chia sẻ trực tiếp. Đây là cách ShortcutManager hoạt động. Vì 2 API này tương tự nhau, nên chúng tôi đã mở rộng API ShortcutInfo để giúp sử dụng cả hai tính năng dễ dàng hơn. Với Share Shortcuts API (API Lối tắt chia sẻ), bạn có thể trực tiếp chỉ định danh mục hoặc người dùng cho mục tiêu chia sẻ. Các mục tiêu chia sẻ vẫn tồn tại trong hệ thống cho đến khi cùng một ứng dụng cập nhật chúng hoặc ứng dụng bị gỡ cài đặt.

Cơ chế Chia sẻ trực tiếp cũ vẫn hoạt động nhưng các ứng dụng dùng cơ chế này có mức độ ưu tiên thấp hơn các ứng dụng dùng API lối tắt chia sẻ.

ShortcutInfo.Builder thêm và cải thiện các phương thức để cung cấp thêm thông tin về mục tiêu chia sẻ.

Mục tiêu chia sẻ trực tiếp

Bạn có thể xuất bản lối tắt động dưới dạng Mục tiêu chia sẻ trực tiếp. Xem nội dung Xuất bản mục tiêu chia sẻ trực tiếp.

ShortcutManagerCompat là một API AndroidX mới cung cấp khả năng tương thích ngược với API DirectShare cũ. Đây là cách ưu tiên để phát hành mục tiêu chia sẻ.

Xem trước văn bản

Khi chia sẻ nội dung văn bản, ứng dụng có thể hiển thị bản xem trước (không bắt buộc) của nội dung đó trong giao diện người dùng của Trang chia sẻ nội dung.

Xem phần Thêm bản xem trước văn bản đa dạng thức

Tìm hiểu thêm

Để biết thêm thông tin về cách các ứng dụng có thể chia sẻ dữ liệu, hãy xem phần Gửi dữ liệu đơn giản đến các ứng dụng khácNhận dữ liệu đơn giản từ các ứng dụng khác

Giao diện tối

Android 10 cung cấp Giao diện tối áp dụng cho cả giao diện người dùng hệ thống Android và các ứng dụng chạy trên thiết bị. Để biết thông tin đầy đủ, hãy xem phần Giao diện tối.

Loại dịch vụ trên nền trước

Android 10 ra mắt thuộc tính tệp kê khai XML foregroundServiceType mà bạn đưa vào định nghĩa của một số dịch vụ cụ thể. Mặc dù hiếm khi phù hợp, nhưng bạn vẫn có thể chỉ định nhiều loại dịch vụ trên nền trước cho một dịch vụ cụ thể.

Bảng sau đây cho thấy nhiều kiểu dịch vụ trên nền trước và dịch vụ thích hợp để khai báo một kiểu cụ thể:

Loại dịch vụ trên nền trước Trường hợp sử dụng mẫu cho những dịch vụ phải khai báo loại này
connectedDevice Theo dõi vòng đeo tay theo dõi hoạt động thể dục
dataSync Tải tệp xuống từ mạng
location Tiếp tục một hành động do người dùng khởi tạo
mediaPlayback Phát sách nói, podcast hoặc nhạc
mediaProjection Quay video màn hình của thiết bị trong một khoảng thời gian ngắn
phoneCall Xử lý cuộc gọi điện thoại đang diễn ra

Kotlin

Android 10 có các nội dung cập nhật sau đây để phát triển Kotlin.

Chú giải tính chất rỗng cho API libcore

Android 10 cải thiện mức độ phù hợp của chú giải tính chất rỗng trong SDK cho các API libcore. Các chú giải này cho phép nhà phát triển ứng dụng đang sử dụng quy trình phân tích tính chất rỗng của Kotlin hoặc Java trong Android Studio để nhận được thông tin về độ rỗng khi tương tác với các API này.

Thông thường, các lỗi vi phạm hợp đồng về tính chất rỗng trong Kotlin sẽ dẫn đến lỗi biên dịch. Để đảm bảo khả năng tương thích với mã hiện có, bạn chỉ cần thêm các chú giải @RecentlyNullable@RecentlyNonNull. Điều này có nghĩa là các lỗi vi phạm tính chất rỗng sẽ dẫn đến cảnh báo thay vì lỗi.

Ngoài ra, mọi chú thích @RecentlyNullable hoặc @RecentlyNonNull đã được thêm vào Android 9 sẽ thay đổi thành @Nullable@NonNull tương ứng. Điều này có nghĩa là trong Android 10 trở lên, lỗi vi phạm tính chất rỗng sẽ dẫn đến lỗi thay vì cảnh báo.

Để biết thêm thông tin về những thay đổi đối với chú giải, hãy xem SDK Android Pie nay phù hợp hơn với Kotlin trên Blog dành cho nhà phát triển Android.

NDK

Android 10 có các thay đổi sau đây về NDK.

Cải thiện tính năng gỡ lỗi quyền sở hữu chỉ số mô tả tệp

Android 10 bổ sung fdsan, giúp bạn tìm và khắc phục các vấn đề về quyền sở hữu chỉ số mô tả tệp dễ dàng hơn.

Các lỗi liên quan đến việc xử lý sai quyền sở hữu chỉ số mô tả tệp (có xu hướng biểu thị dưới dạng use-after-closeDouble-close tương tự như lỗi use-after-freedouble-free (không dùng hai lần) trong phân bổ bộ nhớ, nhưng có xu hướng khó chẩn đoán và khắc phục hơn nhiều. fdsan cố gắng phát hiện và/hoặc ngăn chặn việc quản lý nhầm chỉ số mô tả tệp bằng cách thực thi quyền sở hữu chỉ số mô tả tệp.

Để biết thêm thông tin về sự cố liên quan đến những vấn đề này, hãy xem bài viết Lỗi do fdsan phát hiện. Để biết thêm thông tin về fdsan, hãy xem trang Googlesource về fdsan.

TLS ELF

Các ứng dụng được tạo bằng NDK với API cấp độ 29 trở lên có thể sử dụng TLS ELF thay vì emutls. Chúng tôi đã thêm tính năng hỗ trợ trình liên kết động và tĩnh để hỗ trợ phương thức xử lý các biến cục bộ luồng này.

Đối với các ứng dụng được tạo cho API cấp 28 trở xuống, chúng tôi đã triển khai các điểm cải tiến cho libgcc/compiler-rt để khắc phục một số vấn đề về emutls.

Để biết thêm thông tin, hãy xem Các thay đổi đối với Android đối với nhà phát triển NDK.

Thời gian chạy

Android 10 có thay đổi sau đây về thời gian chạy.

Kích hoạt tính năng thu thập rác dựa trên Mallinfo

Khi các đối tượng Java trên nền tảng nhỏ tham chiếu đến các đối tượng lớn trong vùng nhớ khối xếp C++, các đối tượng C++ thường chỉ có thể được xác nhận lại khi đối tượng Java được thu thập và chẳng hạn như đã hoàn tất. Trong các bản phát hành trước, nền tảng này đã ước tính kích thước của nhiều đối tượng C++ liên kết với các đối tượng Java. Thông tin ước tính này không phải lúc nào cũng chính xác và đôi khi dẫn đến việc tăng đáng kể mức sử dụng bộ nhớ, vì nền tảng không thu thập được rác đúng cách.

Trong Android 10, trình thu thập rác (GC) theo dõi tổng kích thước của vùng nhớ khối xếp do hệ thống malloc() phân bổ, đảm bảo rằng các lượt phân bổ malloc() lớn luôn được đưa vào các phép tính kích hoạt GC. Do đó, các ứng dụng xen kẽ số lượng lớn các lượt phân bổ C++ với quá trình thực thi Java có thể thấy tần suất thu gom rác tăng lên. Các ứng dụng khác có thể giảm nhẹ.

Kiểm thử và gỡ lỗi

Android 10 có các điểm cải tiến sau đây cho quy trình kiểm thử và gỡ lỗi.

Những cải tiến về tính năng theo dõi hệ thống trên thiết bị

Kể từ Android 10, bạn có thể chỉ định giới hạn cho kích thước và thời lượng của dấu vết khi thực hiện dấu vết hệ thống trên thiết bị. Khi bạn chỉ định một trong hai giá trị, hệ thống sẽ thực hiện một dấu vết dài, định kỳ sao chép vùng đệm dấu vết vào tệp đích trong khi ghi lại dấu vết đó. Dấu vết hoàn tất khi đạt đến giới hạn kích thước hoặc thời lượng mà bạn đã chỉ định.

Hãy sử dụng các tham số bổ sung này để kiểm thử các trường hợp sử dụng khác với việc bạn sẽ kiểm thử bằng dấu vết chuẩn. Ví dụ: có thể bạn đang chẩn đoán lỗi hiệu suất chỉ xảy ra sau khi ứng dụng của bạn đã chạy trong một thời gian dài. Trong trường hợp này, bạn có thể ghi lại một dấu vết dài trong cả ngày, sau đó phân tích trình lập lịch biểu CPU, hoạt động của ổ đĩa, luồng ứng dụng và các dữ liệu khác trong báo cáo để giúp bạn xác định nguyên nhân gây ra lỗi.

Trên Android 10 trở lên, các tệp theo dõi được lưu ở định dạng mà bạn có thể mở bằng Perfetto, một dự án nguồn mở để đo lường và theo dõi hiệu suất. Bạn có thể chuyển đổi các tệp theo dõi Perfetto sang định dạng Systrace.

Cải tiến TextClassifier

Android 10 cung cấp thêm chức năng phân loại văn bản trong giao diện TextClassifier.

Phát hiện ngôn ngữ

Phương thức detectLanguage() hoạt động tương tự như các phương thức phân loại đã có trước đó. Phương thức này nhận đối tượng TextLanguage.Request và trả về đối tượng TextLanguage.

Đối tượng TextLanguage bao gồm một danh sách các cặp được sắp xếp. Mỗi cặp chứa một ngôn ngữ và điểm số tin cậy tương ứng để phân loại.

Thao tác đề xuất cho cuộc trò chuyện

Phương thức suggestConversationActions() hoạt động tương tự như các phương thức phân loại hiện có. Hàm này sẽ nhận đối tượng ConversationActions.Request và trả về đối tượng ConversationActions.

Các đối tượng ConversationActions bao gồm một danh sách các đối tượng ConversationAction. Mỗi đối tượng ConversationAction bao gồm một hành động tiềm năng được đề xuất và điểm số tin cậy của hành động đó.

Phản hồi/hành động thông minh trong thông báo

Android 9 đã giới thiệu khả năng hiển thị câu trả lời đề xuất trong thông báo. Android 10 mở rộng tính năng này bằng khả năng bao gồm các hành động dựa trên ý định được đề xuất. Hơn nữa, nền tảng có thể tự động tạo các đề xuất này. Các ứng dụng vẫn có thể cung cấp đề xuất của riêng chúng hoặc chọn không sử dụng các đề xuất do hệ thống tạo.

API dùng để tạo các phản hồi này là một phần của TextClassifier, đồng thời cũng được nhà phát triển trực tiếp cung cấp trong Android 10. Vui lòng đọc phần cải tiến về TextClassifier để biết thêm thông tin.

Nếu ứng dụng của bạn đưa ra các đề xuất riêng, thì nền tảng sẽ không tạo bất kỳ đề xuất tự động nào. Nếu không muốn thông báo của ứng dụng hiển thị bất kỳ câu trả lời hoặc hành động đề xuất nào, bạn có thể chọn không sử dụng các hành động và câu trả lời do hệ thống tạo bằng cách sử dụng setAllowGeneratedReplies()setAllowSystemGeneratedContextualActions().