Android 10 mang đến những tính năng và chức năng tuyệt vời cho người dùng và nhà phát triển. Tài liệu này nêu bật những nội dung dành cho nhà phát triển.
Để tìm hiểu về các API này, hãy đọc báo cáo điểm khác biệt về API hoặc truy cập vào Tài liệu tham khảo về API Android – tìm những API "được thêm vào API cấp 29". Ngoài ra, hãy nhớ tham khảo các thay đổi về hành vi của Android 10 (đối với các ứng dụng nhắm đến API cấp 29 và đối với tất cả ứng dụng), cũng như các thay đổi về quyền riêng tư, để tìm hiểu những thay đổi của nền tảng có thể tác động đến ứng dụng của bạn.
Các điểm cải tiến về bảo mật
Android 10 ra mắt một số tính năng bảo mật mà các phần sau đây sẽ tóm tắt.
Cải thiện hộp thoại xác thực bằng sinh trắc học
Android 10 có những điểm cải tiến sau đây đối với tính năng hỗ trợ xác thực bằng sinh trắc học:
- Kiểm tra khả năng xác thực bằng sinh trắc học.
- Một 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 dữ liệu sinh trắc học.
- Một gợi ý cho hệ thống biết rằng hệ thống 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 phương thức sinh trắc học ngầm định. Ví dụ: bạn có thể cho hệ thống biết rằng không cần xác nhận thêm sau khi người dùng xác thực bằng phương thức xác thực khuôn mặt.
Chạy mã DEX được nhúng trực tiếp tại 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 phần Chạy mã DEX được nhúng ngay từ APK.
Hỗ trợ TLS 1.3
Android 10 bổ sung tính năng hỗ trợ cho TLS 1.3. TLS 1.3 là một bản sửa đổi lớn đối với tiêu chuẩn TLS, bao gồm cả lợi ích về hiệu suất và tính bảo mật nâng cao. Các điểm chuẩn của chúng tôi cho thấy rằng các kết nối an toàn có thể được thiết lập nhanh hơn tới 40% bằng TLS 1.3 so với TLS 1.2.
Để biết thêm thông tin chi tiết về việc triển khai TLS 1.3 của chúng tôi, hãy xem phần TLS trong trang thay đổi về hành vi đối với tất cả các ứng dụng.
Public Conscrypt API
Kể từ Android 10, trình cung cấp dịch vụ bảo mật Conscrypt 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 vào chức năng không có trong các API javax.net.ssl
chung. Bạn có thể suy ra tên của các lớp này là số nhiều của lớp javax.net.ssl
tương ứng. Ví dụ: mã hoạt động trên các phiên bản của javax.net.ssl.SSLSocket
có thể sử dụng các phương thức từ SSLSockets
.
Các tính năng kết nối
Android 10 có một số điểm cải tiến liên quan đến 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ợ cho các 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 liên quan đến việc cung cấp mạng, chẳng hạn như cấu hình 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 phần Wi-Fi Network Request API cho kết nối ngang hàng.
API đề xuất mạng Wi-Fi
Android 10 bổ sung tính năng hỗ trợ để ứ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ể cung cấp các đề xuất về mạng cần kết nối. Nền tảng này sẽ chọn điểm truy cập nào để chấp nhận dựa trên thông tin đầu vào từ 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 thiệ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 một 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ế độ có độ trễ thấp. Chế độ tiết kiệm pin Wi-Fi bị tắt đối với chế độ hiệu suất cao và độ trễ thấp, đồng thời bạn có thể bật chế độ tối ưu hoá độ trễ hơn nữa ở chế độ độ trễ thấp, tuỳ thuộc vào khả năng hỗ trợ của modem.
Chế độ có độ trễ thấp chỉ được bật khi ứng dụng nhận được khoá đang chạy ở nền trước và màn hình đang bật. Chế độ có độ trễ thấp đặc biệt hữu ích cho các ứng dụng trò chơi di động theo thời gian thực.
Tra cứu chuyên biệt trong trình phân giải DNS
Android 10 bổ sung dịch vụ hỗ trợ gốc cho hoạt động tra cứu DNS chuyên dụng bằng cả chế độ tra cứu văn bản thô và DNS qua TLS. Trước đây, trình phân giải DNS của nền tảng chỉ hỗ trợ các bản ghi A và AAAA. Các bản ghi này chỉ cho phép tra cứu địa chỉ IP liên kết với một tên, nhưng không hỗ trợ bất kỳ 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à cung cấ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 phần Wi-Fi Easy Connect.
Wi-Fi Direct connection API
Các lớp API WifiP2pConfig
và WifiP2pManager
có các bản cập nhật trong Android 10 để hỗ trợ khả năng thiết lập kết nối nhanh với Wi-Fi Direct bằng thông tin được 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 một 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 đăng nhập, 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 hướng kết nối (CoC) Bluetooth LE
Android 10 cho phép ứng dụng của bạn sử dụng các kết nối BLE CoC để truyền các luồng dữ liệu lớn hơn giữa hai thiết bị BLE. Giao diện này trừu tượng hoá cơ chế Bluetooth và khả năng kết nối để đơn giản hoá việc 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 dịch vụ đ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 cuộc gọi đang diễn ra qua Hệ thống con đa phương tiện IP (IMS), bao gồm cả chất lượng đến và đi từ mạng, trên những thiết bị hỗ trợ tính năng này.
Tính năng 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 của bạn 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 làm phiền tiềm ẩn và thay mặt người dùng tự động từ chối cuộc gọi làm phiền. Thông tin về những cuộc gọi bị chặn này được ghi lại dưới dạng cuộc gọi bị chặn trong nhật ký cuộc gọi để cung cấp thông tin minh bạch hơn cho người dùng khi họ bỏ lỡ cuộc gọi. Việc sử dụng API này giúp bạn không cần phải xin người dùng cấp quyền READ_CALL_LOG
để cung cấp chức năng sàng lọc cuộc gọi và hiển thị số điện thoại.
API dịch vụ chuyển hướng cuộc gọi
Android 10 thay đổi cách xử lý ý định 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 để bạn sửa đổi các cuộc 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ỷ cuộc gọi và định tuyến lại cuộc gọi qua VoIP.
Cải thiện khả năng tạo tệp trên bộ nhớ ngoài
Ngoài việc giới thiệu bộ nhớ có giới hạn, Android 10 còn bổ sung các chức năng sau liên quan đến bộ nhớ ngoài:
- Bạn có thể sử dụng cờ
IS_PENDING
để cấp cho ứng dụng của bạn quyền truy cập độc quyền vào một 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ể nên lưu trữ các tệp, bạn có thể cung cấp cho hệ thống một 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 nghe nhìn và đồ hoạ
Android 10 giới thiệu các API và tính năng mới sau đây về nội dung nghe nhìn và đồ hoạ:
Chia sẻ đầu vào âm thanh
Android 10 bổ sung khả năng cho phép 2 ứng dụng đồng thời chia sẻ đầu vào âm thanh. Để biết đầy đủ thông tin, hãy xem bài viết Chia sẻ âm thanh đầu vào.
Ghi lại quá trình phát âm thanh
Android 10 cho phép ứng dụng ghi lại nội dung phát âm thanh từ các ứng dụng khác. Để biết toàn bộ thông tin, hãy xem phần Tính năng ghi lại nội dung phát.
Thanh tua trong thông báo MediaStyle
Kể từ Android 10, thông báo MediaStyle
sẽ hiển thị một thanh tìm kiếm. 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 để tua đến một vị trí trong chương trình đang phát. Giao diện và hành vi của thanh tìm kiếm được kiểm soát theo các quy tắc sau:
- Thanh tìm kiếm sẽ xuất hiện nếu có một
MediaSession
đang hoạt động và thời lượng củaMediaSession
đó (doMediaMetadata.METADATA_KEY_DURATION
chỉ định) lớn hơn 0. Điều này có nghĩa là thanh này sẽ không xuất hiện đối với các luồng phát không xác định như sự kiện phát trực tiếp và chương trình phát thanh. - Nếu phiên triển khai
ACTION_SEEK_TO
, người dùng có thể kéo thanh tìm kiếm để kiểm soát vị trí phát.
API MIDI gốc
Android Native MIDI API (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 về JNI.
Để biết thêm thông tin, hãy xem API MIDI gốc của Android.
Các điểm cải tiến đối với MediaCodecInfo
Android 10 bổ sung các phương thức vào MediaCodecInfo
để cho biết thêm thông tin về một codec.
Để 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.
Thermal API
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 phải vấn đề hơn. Những vấn đề này có thể khác nhau trên các thiết bị dựa trên chipset và tần số lõi, mức độ tích hợp, cũng như bao bì và kiểu dáng của thiết bị.
Trong Android 10, các ứng dụng và trò chơi có thể sử dụng API thermal để 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ý một trình nghe trong PowerManager, thông qua đó hệ thống báo cáo trạng thái nhiệt độ hiện tại, từ nhẹ và vừa phải đến nghiêm trọng, quan trọng, khẩn cấp và tắt máy.
Khi thiết bị báo cáo ứng suất nhiệt, các ứng dụng và trò chơi có thể giúp giảm mức sử dụng năng lượng bằng cách dừng các hoạt động đang diễn ra theo nhiều cách. Ví dụ: các ứng dụng phát trực tuyến có thể 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 lưới đ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 thiết bị mới. 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 hợp tác với các đối tác là nhà sản xuất thiết bị để nhanh chóng mang đến sự hỗ trợ rộng rãi cho hệ sinh thái.
Camera và hình ảnh
Android 10 giới thiệu các tính năng mới sau đây liên quan đến máy ảnh và hình ảnh:
Hỗ trợ camera đơn sắc
Android 9 (API cấp 28) lần đầu tiên giới thiệu khả năng camera đơn sắc. Android 10 bổ sung một số điểm cải tiến cho tính năng hỗ trợ camera đơn sắc:
- Hỗ trợ định dạng luồng Y8 để cải thiện hiệu suất bộ nhớ.
- Hỗ trợ chụp ảnh thô đơn sắc ở định dạng DNG.
- Giới thiệu các chế độ liệt kê MONO và NIR CFA để phân biệt giữa camera đơn sắc thông thường và camera cận hồng ngoại.
Bạn có thể dùng tính năng này để chụp ảnh đơn sắc gốc. Thiết bị nhiều camera logic có thể sử dụng camera đơn sắc làm camera phụ thực tế để đạt được chất lượng hình ảnh tốt hơn trong điều kiện thiếu sáng.
Định dạng độ sâu động
Kể từ Android 10, camera có thể lưu trữ dữ liệu độ sâu cho một hình ảnh trong một tệp riêng biệt bằng cách sử dụ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 độ sâu của hình ảnh đó, sử dụng thông tin đó để áp dụng mọi hiệu ứng làm mờ mà chúng muốn trong quá trình xử lý hậu kỳ mà không sửa đổi dữ liệu hình ảnh gốc.
Để đọc quy cách cho định dạng này, hãy xem Định dạng độ sâu động.
Định dạng tệp hình ảnh có hiệu suất cao
Định dạng tệp hình ảnh hiệu quả cao (HEIF) là một định dạng hình ảnh và video tiêu chuẩn, có chất lượng mã hoá 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 phần HEIC.
Các điểm cải tiến đối với hệ thống nhiều camera
Android 10 cải thiện việc hợp nhất nhiều camera thành một camera logic duy nhất, đây là một tính năng ra mắt trong Android 9 (API cấp 28). Những nội dung sau đây đã được thêm vào Camera2 API:
isSessionConfigurationSupported(SessionConfiguration sessionConfig)
– cho phép bạn truy vấn xem cấu hình phiên đã truyền có thể dùng để tạo một 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 camera thực đang hoạt động, hỗ trợ một thiết bị camera 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 suất sử dụng điện năng tốt hơn.
API dịch vụ hỗ trợ tiếp cận
Android 10 giới thiệu các API và tính năng mới sau đây của dịch vụ hỗ trợ tiếp cận:
Cờ khoá nhậ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 một khoá nhập văn bản thuộc bàn phím hay bàn phím số 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 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ụ yêu cầu.
Phím tắt hỗ trợ tiếp cận khi bật chế độ 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 xuất hiện hoặc không 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 hai ngón tay.
- Vuốt lên và giữ bằng hai ngón tay.
Lối tắt hỗ trợ tiếp cận cho bàn phím vật lý
Trong 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 thực bằng cách nhấn tổ hợp phím Control+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 ảo ngay cả khi thiết bị phát hiện thấy bàn phím cứng được gắn. 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 giới thiệu 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ử trên giao diện người dùng có thể tương tác và không tương tác. Giá trị trả về chịu ảnh hưởng của cả lựa chọn ưu tiên của người dùng và các API dịch vụ hỗ trợ tiếp cận.
Cải thiện tính năng tự động điền
Android 10 có những điểm cải tiến sau đây cho dịch vụ tự động điền.
Yêu cầu tự động điền liên quan đến khả năng tương thích
Bạn có thể sử 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 tên người dùng và mật khẩu cùng lúc
Bạn có thể hỗ trợ các trường hợp mà một ứng dụng sử dụng nhiều hoạt động để hiển thị tên người dùng, mật khẩu và các trường khác bằng cách sử dụng cờ SaveInfo.FLAG_DELAY_SAVE
.
Tương tác của người dùng với giao diện người dùng 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 đặt một trình nghe thao tác trên hộp thoại và thay đổi chế độ hiển thị của khung hiển thị từ xa mật khẩu 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 mật khẩu hiện có. Ví dụ: nếu người dùng đã lưu trữ một 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 có thay vì lưu một mật khẩu mới.
Các điểm cải tiến về Phân loại trường
Android 10 có những điểm cải tiến sau đây đối với Field Classification API.
Hàm khởi tạo UserData.Builder
Hàm khởi tạo UserData.Builder
đã thay đổi để phù hợp 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
Khi sử dụng UserData.Builder
trong Android 10, giờ đây, 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, một ngoại lệ sẽ được đưa ra nếu một giá trị được thêm nhiều lần.
Cải thiện khả năng hỗ trợ cho số thẻ tín dụng
Giờ đây, tính năng phân loại trường có thể phát hiện các số có 4 chữ số là 4 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 đặt dữ liệu người dùng dành riêng cho ứng dụng trong thời gian diễn ra phiên.
Điều này giúp dịch vụ tự động điền phát hiện các loại cho những 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ế độ kiểm soát hệ thống
Android 10 có những điểm cải tiến sau đây về giao diện người dùng:
Hỗ trợ các chức năng JVMTI PopFrame
Android 10 bổ sung khả năng hỗ trợ 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 ở một điểm ngắt và điều chỉnh các biến cục bộ, biến toàn cục hoặc việc triển khai một hàm. Để biết thêm thông tin, hãy xem trang tham khảo về Khung bật lên của Oracle.
API điều khiển bề mặt
Android 10 cung cấp một API SurfaceControl
để truy cập cấp thấp vào trình kết hợp hệ thống (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 kết hợp. API SurfaceControl
có thể hữu ích trong một số trường hợp, chẳng hạn như:
- Đồng bộ hoá nhiều nền tảng
- Nhúng nền tảng trên nhiều quy trình
- Quản lý thời gian tồn tại ở cấp thấp hơn
API SurfaceControl
có trong cả SDK và các liên kết NDK.
Việ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 kết 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 hạn chế của BufferQueue
.
Tính năng phát hiện trình kết xuất bị treo của WebView
Android 10 ra mắt lớp trừu tượng WebViewRenderProcessClient
. Các ứng dụng có thể dùng lớp này để phát hiện xem WebView
có ngừng phản hồi hay không. Cách sử dụng lớp này:
- Xác định lớp con của riêng bạn và triển khai các phương thức
onRenderProcessResponsive()
vàonRenderProcessUnresponsive()
của lớp con đó. - Đính kèm một phiên bản của
WebViewRenderProcessClient
vào một hoặc nhiều đối tượngWebView
. - Nếu
WebView
không phản hồi, hệ thống sẽ gọi phương thứconRenderProcessUnresponsive()
của ứng dụng, truyềnWebView
vàWebViewRenderProcess
. (NếuWebView
là quy trình đơn, thì tham sốWebViewRenderProcess
sẽ là giá trị rỗng.) Ứng dụng của bạn có thể thực hiện hành động thích hợp, chẳng hạn như hiện một hộp thoại cho người dùng để hỏi xem họ có muốn dừng quy 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()
theo định kỳ (không quá một lần sau mỗi 5 giây), nhưng không thực hiện hành động nào khác.
Nếu WebView
phản hồi lại, hệ thống sẽ 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 các ứng dụng hiển thị chế độ cài đặt cho người dùng trong bối cảnh ứng dụng của họ. Điều này giúp 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.


Ví dụ: giả sử người dùng mở một 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 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 nội tuyến cho thấy các chế độ cài đặt kết nối chính, 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 kết nối mà không cần rời khỏi ứng dụng.
Để hiển thị bảng điều khiển cài đặt, hãy kích hoạt một ý định bằng một trong các thao tác Settings.Panel
sau đây:
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 thị các chế độ cài đặt liên quan đến khả năng 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ị chế độ cài đặt Wi-Fi, nhưng không hiển thị các chế độ cài đặt kết nối khác. Điều này hữu ích cho những ứng dụng cần có kết nối Wi-Fi để thực hiện các hoạt động tải lên hoặc tải xuống có kích thước lớn.
ACTION_NFC
- Hiển thị tất cả các chế độ cài đặt liên quan đến công nghệ giao tiếp phạm vi gần (NFC).
ACTION_VOLUME
- Cho biết chế độ cài đặt âm lượng cho tất cả luồng âm thanh.
Cải tiến về tính năng chia sẻ
Android 10 có một số điểm cải tiến về tính năng chia sẻ:
Sharing Shortcuts API
Sharing Shortcuts API (API Lối tắt để chia sẻ) sẽ thay thế Direct Share APIs (API Chia sẻ trực tiếp).
Thay vì truy xuất kết quả một cách phản ứng theo yêu cầu, Sharing Shortcuts API cho phép các ứng dụng xuất bản trước các mục tiêu chia sẻ trực tiếp. Sau đây là cách hoạt động của ShortcutManager
.
Vì 2 API này tương tự nhau, nên chúng tôi đã mở rộng ShortcutInfo
API để giúp bạn dễ dàng sử dụng cả 2 tính năng. Với Sharing Shortcuts API, bạn có thể chỉ định trực tiếp danh mục hoặc người dùng cho một 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 ứng dụng tương tự 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 những ứng dụng sử dụng cơ chế này có mức độ ưu tiên thấp hơn so với những ứng dụng sử dụng Sharing Shortcuts API.
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 một lối tắt động dưới dạng Mục tiêu chia sẻ trực tiếp. Xem phần 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 để xuất bản các 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ể cho thấy bản xem trước không bắt buộc của nội dung đó trong giao diện người dùng Tờ chia sẻ.
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 bài viết Gửi dữ liệu đơn giản đến các ứng dụng khác và Nhậ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 một Giao diện tối áp dụng cho cả giao diện người dùng của hệ thống Android và các ứng dụng chạy trên thiết bị. Để biết đầy đủ thông tin, hãy xem phần Giao diện tối.
Loại dịch vụ trên nền trước
Android 10 giới thiệu 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ể. Bạ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ể, mặc dù hiếm khi phù hợp.
Bảng sau đây cho thấy các loại dịch vụ trên nền trước và những dịch vụ mà bạn nên khai báo một loại cụ thể:
Loại dịch vụ trên nền trước | Trường hợp sử dụng mẫu cho một dịch vụ cần khai báo loại này |
---|---|
connectedDevice
| Theo dõi bằng thiết bị đeo theo dõi sức khoẻ |
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 bắt đầu |
mediaPlayback
| Phát sách nói, podcast hoặc nhạc |
mediaProjection
| Quay video màn hình 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 bản cập nhật sau đây cho hoạt động phát triển bằng Kotlin.
Chú giải tính chất rỗng (null) cho các API libcore
Android 10 cải thiện phạm vi của chú thích về tính chất rỗng trong SDK cho các API libcore. Các chú thích này cho phép nhà phát triển ứng dụng đang sử dụng tính năng phân tích khả năng có giá trị rỗng của Kotlin hoặc Java trong Android Studio nhận được thông tin về trạng thái 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ó, chỉ các chú thích @RecentlyNullable
và @RecentlyNonNull
được thêm vào. Điều này có nghĩa là các lỗi vi phạm về khả năng 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 đều sẽ thay đổi thành @Nullable
và @NonNull
, tương ứng.
Điều này có nghĩa là trong Android 10 trở lên, các lỗi về khả năng rỗng sẽ dẫn đến lỗi thay vì cảnh báo.
Để biết thêm thông tin về các thay đổi đối với chú thích, hãy xem bài viết Android Pie SDK hiện thân thiện hơn với Kotlin trên Blog dành cho nhà phát triển Android.
NDK
Android 10 có những thay đổi sau đây về NDK.
Cải thiện việc gỡ lỗi quyền sở hữu chỉ số mô tả tệp
Android 10 bổ sung fdsan, giúp bạn dễ dàng tìm và khắc phục các vấn đề về quyền sở hữu của bộ mô tả tệp.
Các lỗi liên quan đến việc xử lý sai quyền sở hữu của bộ mô tả tệp (thường biểu hiện dưới dạng use-after-close và double-close) tương tự như các lỗi use-after-free và double-free khi phân bổ bộ nhớ, nhưng thườ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ý sai bộ mô tả tệp bằng cách thực thi quyền sở hữu bộ mô tả tệp.
Để biết thêm thông tin về các sự cố liên quan đến những vấn đề này, hãy xem phần Lỗi do fdsan phát hiện. Để biết thêm thông tin về fdsan, hãy xem trang Googlesource về fdsan.
ELF TLS
Các ứng dụng được tạo bằng NDK có cấp độ API tối thiểu là 29 có thể sử dụng ELF TLS thay vì emutls
. Chúng tôi đã thêm tính năng hỗ trợ trình liên kết tĩnh và động để hỗ trợ phương thức xử lý các biến cục bộ theo 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
để giải quyết một số vấn đề về emutls
.
Để biết thêm thông tin, hãy xem bài viết Các thay đổi của Android dành cho 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 gom rác dựa trên mallinfo
Khi các đối tượng Java 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 thu hồi khi đối tượng Java được thu thập và, ví dụ: được 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++ đượ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 mức sử dụng bộ nhớ tăng lên đáng kể, vì nền tảng không thu thập rác khi đáng lẽ phải làm.
Trong Android 10, trình thu gom rác (GC) theo dõi tổng kích thước của vùng nhớ tạm do hệ thống malloc()
phân bổ, đảm bảo rằng các hoạt động phân bổ malloc()
lớn luôn được đưa vào các phép tính kích hoạt GC. Các ứng dụng xen kẽ số lượng lớn các hoạt động 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ể bị giảm nhẹ.
Kiểm thử và gỡ lỗi
Android 10 có những điểm cải tiến sau đây để kiểm thử và gỡ lỗi.
Các điểm cải tiến cho 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 về 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ị này, hệ thống sẽ thực hiện một dấu vết dài, định kỳ sao chép bộ đệm dấu vết vào tệp đích trong khi dấu vết được ghi lại. Dấu vết sẽ hoàn tất khi đạt đến giới hạn về kích thước hoặc thời lượng mà bạn đã chỉ định.
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 trường hợp bạn sẽ kiểm thử bằng một dấu vết tiêu chuẩn. Ví dụ: bạn có thể đang chẩn đoán một lỗi hiệu suất chỉ xảy ra sau khi ứng dụng của bạn chạy trong một khoảng 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 bộ lập lịch 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.
Trong Android 10 trở lên, các tệp theo dõi được lưu ở định dạng có thể mở bằng Perfetto, một dự án mã nguồn mở để đo lường và theo dõi hiệu suất. Bạn có thể chuyển đổi 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 hiện có trước đây. Phương thức này nhận một đối tượng TextLanguage.Request
và trả về một đối tượng TextLanguage
.
Các đối tượng TextLanguage
bao gồm một danh sách các cặp có thứ tự. Mỗi cặp chứa một ngôn ngữ và điểm số độ tin cậy tương ứng cho việc phân loại.
Hành động được đề xuất trong 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ó. Phương thức này nhận một đối tượng ConversationActions.Request
và trả về một đố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
đều bao gồm một hành động được đề xuất tiềm năng và điểm số mức độ tin cậy của hành động đó.
Câu trả lời/hành động thông minh trong thông báo
Android 9 ra mắt tính 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 cách bổ sung khả năng đưa ra các hành động dựa trên ý định đề xuất. Ngoài ra, nền tảng này có thể tự động tạo những đề xuất này. Các ứng dụng vẫn có thể cung cấp đề xuất của riêng mình hoặc chọn không sử dụng đề xuất do hệ thống tạo.API dùng để tạo các câu trả lời này là một phần của TextClassifier
và cũng được cung cấp trực tiếp cho nhà phát triển trong Android 10.
Vui lòng đọc phần về các điểm cải tiến của TextClassifier để biết thêm thông tin.
Nếu ứng dụng của bạn cung cấp 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âu trả lời và hành động do hệ thống tạo bằng cách dùng setAllowGeneratedReplies()
và setAllowSystemGeneratedContextualActions()
.