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

Android 10 ra mắt các 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 tính năng 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 của Android – tìm các 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 ứng dụng nhắm đến API cấp 29tấ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ể ả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.

Hộp thoại xác thực bằng sinh trắc học được cải tiến

Android 10 giới thiệu các điểm cải tiến sau đây 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.
  • Cơ chế dự phòng cho phép người dùng xác thực bằng thiết bị của họ Mã PIN, hình mở khoá hoặc mật khẩu nếu các thiết bị đó không thể xác thực bằng dữ liệu sinh trắc học đầu vào.
  • Gợi ý cho 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 ẩn. 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 đã được xác thực bằng 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á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 Chạy mã DEX đã 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 chính cho 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 cho thấy rằng TLS 1.3 có thể thiết lập kết nối bảo mật nhanh hơn TLS 1.2 tới 40%.

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

API Conscrypt công khai

Kể từ Android 10, nhà cung cấp dịch vụ bảo mật Conscrypt bao gồm API công khai cho chức năng TLS.

Tập hợp các lớp trong android.net.ssl chứa tĩnh các phương thức để truy cập chức năng không có trong tập lệnh chung Các API javax.net.ssl. Tên của các lớp này có thể được suy ra dưới dạng 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ể 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 hỗ trợ thêm các kết nối ngang hàng. Chiến dịch 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à được kết nối với bằng cách sử dụng WifiNetworkSpecifier để mô tả thuộc tính của một 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 phải 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 khả năng kết nối.

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 đến một điểm truy cập Wi-Fi. Bạn có thể đưa ra đề xuất về mạng cần kết nối sang. Cuối cùng, nền tảng sẽ chọn điểm truy cập để chấp nhận đầ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 Đề 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ả ở hiệu suất cao và chế độ độ trễ thấp. Tính năng tiết kiệm pin cho Wi-Fi bị tắt đối với những ứng dụng có hiệu suất cao và chế độ độ trễ thấp và tối ưu hoá độ trễ hơn nữa có thể được bật ở độ trễ thấp chế độ khác, 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á chạy ở nền trước và màn hình đang bật. Chế độ độ trễ thấp là đặc biệt hữu ích đối với các ứng dụng trò chơi theo thời gian thực dành cho thiết bị di độ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ợ riêng cho 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ô và chế độ DNS-over-TLS. Trước đây, DNS của nền tảng trình phân giải chỉ hỗ trợ bản ghi A và AAAA nên chỉ cho phép tra cứu IP được liên kết với 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 các dịch vụ tổng quát độ phân giải không đồng bộ, cho phép bạn tra cứu SRV, NAPTR, v.v. loại bản ghi. 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 để cấp phép Wi-Fi thông tin đăng nhập vào một thiết bị ngang hàng để thay thế cho WPS (không dùng nữa). 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 thời gian ACTION_PROCESS_WIFI_EASY_CONNECT_URI ý định.

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

API kết nối Wi-Fi Direct

Các lớp API WifiP2pConfigWifiP2pManager có nội dung 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 đã xác định trước. Thông tin này được chia sẻ qua kênh phụ, chẳng hạn như dưới dạng Bluetooth hoặc NFC.

Mã mẫu sau đây cho biết cách tạo một nhóm bằng định dạng được xác định trước của bạn:

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);

Kênh định hướng kết nối Bluetooth năng lượng thấp (CoC)

Android 10 cho phép ứng dụng của bạn sử dụng kết nối CoC BLE để chuyển các luồng dữ liệu lớn hơn giữa hai 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á việc triển khai.

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 Cuộc gọi trong Hệ thống con đa phương tiện qua giao thức IP (IMS), bao gồm cả chất lượng cuộc gọi đến và đi từ 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à tên nhận dạng người gọi

Android 10 cung cấp cho ứng dụng của bạn cách thức để xác định các cuộc gọi không trong sổ địa chỉ của người dùng dưới dạng cuộc gọi có khả năng làm phiền và có các cuộc gọi làm phiền đã âm thầm từ chối thay mặt người dùng. Thông tin về các 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 để giúp khi bỏ lỡ cuộc gọi. Việc sử dụng API này sẽ loại bỏ yêu cầu để lấy READ_CALL_LOG quyền từ người dùng để cung cấp tính năng sàng lọc cuộc gọi và chức năng tên 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 gọi. Chiến lược phát hành đĩa đơn Tính năng truyền tin NEW_OUTGOING_CALL không được dùng nữa và được thay thế bằng thông số truyền tin API CallRedirectionService. API CallRedirectionService cung cấp để 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ỷ các cuộc gọi và định tuyến lại qua VoIP.

Những cải tiến về tính năng tạo tệp trên bộ nhớ ngoài

Ngoài việc giới thiệu phạm vi bộ nhớ, Android 10 bổ sung các tính năng sau đây liên quan đến bộ nhớ:

  • Bạn có thể sử dụng IS_PENDING gắn cờ để cấp cho ứng dụng của bạn quyền truy cập độc quyền vào một tệp đa phương tiện khi tệp được ghi vào ổ đĩa.
  • Nếu biết vị trí cụ thể nơi tệp nên được lưu trữ, bạn có thể cung cấp cho hệ thống một gợi ý để nơi 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 ra mắt các API cũng như tính năng đồ hoạ và nội dung đa phương tiện mới sau đây:

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

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

Ghi lại âm thanh phát

Android 10 cung cấp cho ứng dụng khả nă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 phần Chụp ảnh khi phát.

Thanh tua lại trong thông báo MediaStyle

Kể từ Android 10, thông báo MediaStyle sẽ hiển thị thanh tua. Thanh tua cho thấy tiến trình phát từ PlaybackState.getPosition()! và trong một số trường hợp, thanh tua có thể được dùng để tìm một vị trí trong đoạn nhạc . 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 sẽ xuất hiện nếu có một MediaSession đang hoạt động và thời lượng tương ứng (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 luồng 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 tua để điều khiển vị trí phát.

API MIDI gốc

API MIDI gốc cho Android (AMidi) giúp nhà phát triển ứng dụng có thể để gửi và nhận dữ liệu MIDI với mã C/C++, tích hợp chặt chẽ hơn với logic điều khiển/âm thanh C/C++ và giảm thiểu nhu cầu về JNI.

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

Cải tiến MediaCodecInfo

Android 10 thêm các phương thức để MediaCodecInfo hiển thị thêm về một bộ mã hoá và giải mã.

Để biết thêm thông tin, hãy xem phần 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, từ đó có thể ảnh hưởng đến ứng dụng và trò chơi theo cách không mong muốn. Ứng dụng sử dụng đồ hoạ phức tạp, nặng tính toán 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 và những tín hiệu này có thể khác nhau giữa các thiết bị dựa trên bộ vi mạch, tần số lõi, mức độ tích hợp cũng như bao bì thiết bị và kiểu dáng thiết bị.

Trong Android 10, ứng dụng và trò chơi có thể dùng API Nhiệt để theo dõi các thay đổi trên thiết bị và có biện pháp khắc phục để duy trì mức sử dụng pin thấp hơn nhằm khôi phục mức sử dụng pin bình thường nhiệt độ. Ứng dụng đăng ký một trình nghe trong PowerManager, mà qua đó hệ thống báo cáo tình trạng nhiệt đang diễn ra ở mức độ 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 ích bằng cách giảm 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, máy ảnh có thể tắt flash hoặc tính năng cải thiện hình ảnh chuyên sâu, thì trò chơi có thể giảm tốc độ khung hình hoặc đa giác, một ứng dụng đa phương tiện có thể làm giảm âm lượng người nói, và ứng dụng bản đồ có thể tắt GPS.

API Nhiệt yêu cầu một lớp HAL (Lớp trừu tượng phần cứng) mới cho thiết bị (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 nhà sản xuất thiết bị để hỗ trợ rộng rãi hệ sinh thái nhanh nhất có thể.

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

Android 10 ra mắt các tính năng mới sau đây liên quan đến máy ảnh và hình ảnh:

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ố tính năng nâng cao để hỗ trợ máy ảnh đơn sắc:

  • Hỗ trợ định dạng luồng Y8 để cải thiện hiệu quả của bộ nhớ.
  • Hỗ trợ chụp ảnh DNG thô đơn sắc.
  • Giới thiệu giá trị liệt kê CFA MONO và NIR để phân biệt giữa các giá trị thông thường máy ảnh đơn sắc 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 ảnh đơn sắc gốc. Một hàm logic thiết bị nhiều máy ảnh có thể sử dụng máy ảnh đơn sắc làm máy ảnh phụ thực để có đượ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, camera có thể lưu trữ dữ liệu chiều sâu cho hình ảnh trong 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). Ứng dụng có thể yêu cầu cả hình ảnh JPG và siêu dữ liệu chiều sâu của hình ảnh, sử dụng thông tin đó để áp dụng bất kỳ độ mờ nào họ muốn trong hậu xử lý mà không cần sửa đổi ảnh gốc dữ liệu hình ảnh.

Để đọc thông số kỹ thuật của định dạng này, hãy 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à một định dạng hình ảnh và video tiêu chuẩn, mang đến khả năng 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 phần HEIC.

Các cải tiến về chế độ nhiều camera

Android 10 cải thiện việc kết hợp nhiều camera thành một camera logic duy nhất. một tính năng ra mắt trên Android 9 (API cấp 28). Các mục sau đây đã được thêm vào thời gian API Camera2:

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

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

Cờ khoá của mục 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 hay không là một phần của bàn phím hoặc bàn phím.

Phản hồi bằng giọng nói của 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 lối tắt hỗ trợ tiếp cận để bắt đầu dịch vụ hỗ trợ tiếp cận, Android 10 cho phép hộp thoại kèm theo lời nhắc chuyển văn bản sang lời nói nếu dịch vụ yêu cầu.

Lối tắt hỗ trợ tiếp cận khi bật tính năng điều hướng bằng cử chỉ

Khi tính năng thao tác bằng cử chỉ được bật trong Android 10, tính năng hỗ trợ tiếp cận không phải là có thể nhìn thấy 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 lối tắt hỗ trợ tiếp cận trên bàn phím vật lý bằng cách nhấn 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 mềm ngay cả khi thiết bị phát hiện thấy bàn phím cứng được gắn vào. 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 thành phần giao diện người dùng tương tác và không tương tác. Giá trị trả về chịu ảnh hưởng của cả người dùng các lựa chọn ưu tiên và API dịch vụ hỗ trợ tiếp cận.

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 đối với 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 FillRequest.FLAG_COMPATIBILITY_MODE_REQUEST gắn cờ để xác định xem yêu cầu tự động điền có được tạo thông qua khả năng tương thích hay không .

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 trong đó ứng dụng 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 SaveInfo.FLAG_DELAY_SAVE cờ.

Người dùng tương tác 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 thiết lập thao tác trình nghe trên hộp thoại và thay đổi chế độ hiển thị của mật khẩu tương ứng chế độ xem từ xa.

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 tại. Ví dụ: nếu một người dùng đã đã lưu trữ mật khẩu và họ sẽ lưu mật khẩu mới, 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 tiến tính năng Phân loại trường

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

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

Chiến lược phát hành đĩa đơn UserData.Builder hàm khởi tạo đã 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 inch Trên Android 10, bạn hiệ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 gửi nếu một giá trị được thêm nhiều lần.

Cải thiện dịch vụ 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ó bốn chữ số ở dạng 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

Tính năng bổ sung trên Android 10 FillResponse.setUserData()! cho phép bạn đặt dữ liệu người dùng theo ứng dụng cụ thể trong suốt thời gian diễn ra phiên hoạt động. Việc này giúp dịch vụ tự động điền phát hiện loại trường có nội dung dành riêng cho ứng dụng nội dung.

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

Android 10 có các điểm cải tiến sau đây về giao diện người dùng:

Hỗ trợ chữ hoa PopFrame của JVMTI

Android 10 bổ sung tính năng hỗ trợ cho chức 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 điểm ngắt và điều chỉnh cục bộ, tập lệnh toàn cục hoặc cách 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 API SurfaceControl để có quyền truy cập cấp thấp vào trình tổng hợp hệ thống (SurfaceFlinger). Để hầu hết người dùng, SurfaceView là cách thích hợp để tận dụng trình tổng hợp. Chiến lược phát hành đĩa đơn 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 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ó sẵn ở cả hai Các mối liên kết SDK và 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 tổng hợp. Điều này cung cấp giải pháp thay thế cho người dùng đã gặp phải giới hạn của BufferQueue.

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

Android 10 ra mắt WebViewRenderProcessClient lớp trừu tượng mà các ứng dụng có thể dùng để phát hiện xem WebView không phản hồi. 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 lớp con onRenderProcessResponsive()onRenderProcessUnresponsive() .
  2. Đính kèm một bản sao của WebViewRenderProcessClient vào một hoặc nhiều bản sao Đố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à một quá trình, WebViewRenderProcess tham số là 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 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á một lần mỗi 5 giây) nhưng không thực hiện hành động nào khác. Nếu WebView trở nên thích ứng xin nhắc lại, hệ thống chỉ gọi onRenderProcessResponsive() một lần.

Bảng cài đặt

Android 10 ra mắt Settings Panels (Bảng cài đặt), một API cho phép các ứng dụng hiển thị cài đặt cho người dùng trong bối cảnh ứng dụng của họ. Nhờ đó, người dùng sẽ không cần để chuyển đến phần Cài đặt để thay đổi những mục như NFC hoặc Dữ liệu di động trong để 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ị chưa được kết nối với mạng. Chrome bật lên cửa sổ Kết nối Internet bảng cài đặt...

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 thoát khỏi ứng dụng Chrome.

Ví dụ: Giả sử một người dùng mở trình duyệt web trong 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ị thông báo chung yêu cầu người dùng mở 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 như chế độ trên máy bay, Wi-Fi (bao gồm cả mạng lân cận) và dữ liệu di động. Bằng 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ị một 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 lệnh sau Thao tác Settings.Panel:

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 tùy chọn 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 cài đặt Wi-Fi nhưng không hiển thị các cài đặt kết nối khác. Đây là hữu ích cho các ứng dụng cần kết nối Wi-Fi để tải lên các tệp có kích thước lớn hoặc lượt tải xuống.
ACTION_NFC
Hiển thị tất cả chế độ cài đặt liên quan đến giao tiếp trường gần (NFC).
ACTION_VOLUME
Hiển thị chế độ cài đặt âm lượng cho mọi luồng âm thanh.

Cải tiế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 Chia sẻ lối tắt

Chia sẻ lối tắt API thay thế tính năng Chia sẻ trực tiếp API.

Thay vì truy xuất kết quả một cách linh hoạt theo yêu cầu, Share Shortcuts API 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ì hai API này tương tự nhau, nên chúng tôi đã mở rộng ShortcutInfo API để giúp việc sử dụng cả hai tính năng trở nên 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 hoặc nhiều người vào một mục tiêu chia sẻ. Mục tiêu chia sẻ vẫn còn trong hệ thống cho đến khi ứ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 sử dụng cơ chế này có mức độ ưu tiên thấp hơn so với các ứng dụng sử 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 bài viết Xuất bản mục tiêu chia sẻ trực tiếp.

ShortcutManagerCompat là API AndroidX mới cung cấp khả năng tương thích ngược với DirectShare API cũ. Chiến dịch này là cách ưu tiên để xuất bản mục tiêu chia sẻ.

Xem trước văn bản

Khi chia sẻ nội dung văn bản, một ứng dụng có thể hiển thị bản xem trước (không bắt buộc) nội dung trong giao diện người dùng 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, 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ả thiết bị Android giao diện người dùng hệ thống và các ứng dụng chạy trên thiết bị. Để biết toàn bộ thông tin, xem Giao diện tối.

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

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

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

Loại dịch vụ trên nền trước Ví dụ về trường hợp sử dụng dịch vụ cần khai báo loại này
connectedDevice Theo dõi vòng đeo tay theo dõi sức khoẻ
dataSync Tải tệp xuống từ một mạng
location Tiếp tục hành động do người dùng thực hiện
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 phạm vi của chú giải tính chất rỗng trong SDK dành cho 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 tính chất rỗng của Kotlin hoặc Java trong Android Studio để nhận thông tin về tính chất 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 quá trình biên dịch . Để đảm bảo khả năng tương thích với mã hiện có của bạn, chỉ những Thêm các chú thích @RecentlyNullable@RecentlyNonNull. Điều này có nghĩa là rằng 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ẽ lần lượt thay đổi thành @Nullable@NonNull. Điều này có nghĩa là, trong Android 10 trở lên, các lỗi vi phạm về tính chất rỗng 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ú thích, hãy xem SDK Android Pie hiện thân thiện với Kotlin hơn trên Blog dành cho nhà phát triển Android.

NDK

Android 10 có các thay đổi sau đây đối với 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 thêm 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 chỉ số mô tả tệp.

Các lỗi liên quan đến việc xử lý sai quyền sở hữu chỉ số mô tả tệp (thường biểu thị dưới dạng lỗi sử dụng sau khi đóngđóng hai lần) tương tự như lỗi phân bổ bộ nhớ sử dụng sau khi giải phónggiải phóng hai lần, 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 xử lý sai 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 Lỗi do fdsan phát hiện. Để biết thêm thông tin về fdsan, hãy xem Trang Googlesource trên fdsan.

TLS ELF (Bảo mật tầng truyền tải)

Các ứng dụng được tạo bằng NDK có API cấp độ tối thiểu là 29 có thể dùng TLS ELF thay vì emutls. Chúng tôi đã thêm tuỳ chọn hỗ trợ cho trình liên kết động và tĩnh phương thức xử lý biến luồng cục bộ 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 Những thay đổi đối với Android dành cho nhà phát triển NDK.

Thời gian chạy

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

Kích hoạt hoạt động thu thập 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++, Đối tượng C++ thường chỉ có thể được lấy lại khi đối tượng Java được thu thập và, ví dụ: hoàn tất. Trong các bản phát hành trước, nền tảng đã ước tính kích thước nhiều đối tượng C++ được liên kết với đố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ì không thể thu thập rác khi cần.

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

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

Android 10 có các điểm cải tiến sau đây dành cho hoạt động kiểm thử và gỡ lỗi.

Cải tiến 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 một dấu vết khi bạn thực hiện một theo dõi 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. Quá trình theo dõi 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.

Sử dụng các tham số bổ sung này để thử nghiệm các trường hợp sử dụng khác với khi bạn thử nghiệm với một dấu vết chuẩn. Ví dụ: bạn có thể đ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. Ngang bằng 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 lỗi.

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

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 TextClassifier .

Phát hiện ngôn ngữ

Chiến lược phát hành đĩa đơn detectLanguage() hoạt động tương tự như các phương pháp phân loại có sẵn trước đây. Nó nhận được một 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 sắp. Mỗi cặp chứa 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

Chiến lược phát hành đĩa đơn suggestConversationActions() hoạt động tương tự như các phương pháp 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.

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

Trả lờ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 . Android 10 mở rộng tính năng này bằng khả năng đưa vào các hành động dựa trên ý định được đề xuất. Hơn nữa, nền tảng này có thể tự động tạo các đề xuất này. Ứng dụng vẫn có thể cung cấp các đề xuất của riêng mình hoặc chọn không sử dụng các đề xuất do hệ thống tạo.

API dùng để tạo những phản hồi này là một phần của TextClassifier! và cũng đã được trực tiếp tiếp xúc với các 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 đưa ra đề xuất riêng, thì nền tảng này sẽ không tạo bất kỳ nội dung nào đề xuất tự động. Nếu bạn không muốn hiển thị thông báo của ứng dụng mọi câu trả lời hoặc hành động đề xuất, bạn có thể chọn không nhận những câu trả lời do hệ thống tạo và hành động bằng cách sử dụng setAllowGeneratedReplies()setAllowSystemGeneratedContextualActions().