API Android 4.2

Cấp độ API: 17

Android 4.2 (JELLY_BEAN_MR1) là bản cập nhật cho bản phát hành Jelly Bean, cung cấp các tính năng mới cho người dùng và ứng dụng nhà phát triển. Tài liệu này giới thiệu những thông tin đáng chú ý nhất và các API mới hữu ích cho nhà phát triển.

Là nhà phát triển ứng dụng, bạn nên tải xuống hình ảnh hệ thống và nền tảng SDK Android 4.2 từ Trình quản lý SDK sớm nhất có thể. Nếu bạn không có thiết bị chạy Android 4.2 để kiểm thử ứng dụng của bạn, hãy sử dụng hệ thống Android 4.2 hình ảnh để kiểm thử ứng dụng của bạn trên trình mô phỏng Android. Sau đó, xây dựng ứng dụng của bạn dựa trên nền tảng Android 4.2 để bắt đầu sử dụng các API mới nhất.

Để tối ưu hoá ứng dụng của bạn hiệu quả hơn cho các thiết bị chạy Android 4.2, bạn nên đặt targetSdkVersion thành "17", hãy cài đặt ứng dụng này trên ảnh hệ thống Android 4.2, hãy kiểm thử rồi xuất bản bản cập nhật cùng với thay đổi này.

Bạn có thể sử dụng API trong Android 4.2 trong khi vẫn hỗ trợ các phiên bản cũ hơn bằng cách thêm các điều kiện vào mã của bạn để kiểm tra cấp độ API của hệ thống trước khi thực thi Các API không được minSdkVersion của bạn hỗ trợ. Để tìm hiểu thêm về duy trì khả năng tương thích ngược, hãy đọc bài viết Tạo khả năng tương thích ngược Giao diện người dùng.

Bạn có thể xem thêm thông tin về cách hoạt động của các cấp độ API trong bài viết API là gì Cấp độ?

Thay đổi quan trọng về hành vi

Nếu bạn từng phát hành một ứng dụng cho Android, hãy lưu ý những điều sau những thay đổi có thể ảnh hưởng đến hành vi của ứng dụng:

  • Trình cung cấp nội dung không còn được xuất theo mặc định. Tức là giá trị mặc định cho thuộc tính android:exported hiện là “false". Nếu các ứng dụng khác cần có thể truy cập vào trình cung cấp nội dung của mình, bạn hiện phải đặt android:exported="true" một cách rõ ràng.

    Thay đổi này chỉ có hiệu lực nếu bạn đặt android:targetSdkVersion hoặc android:minSdkVersion thành 17 trở lên. Nếu không, giá trị mặc định vẫn là “true" ngay cả khi chạy trên Android 4.2 trở lên.

  • So với các phiên bản Android trước, kết quả theo vị trí của người dùng có thể kém chính xác hơn nếu ứng dụng của bạn yêu cầu quyền ACCESS_COARSE_LOCATION nhưng không yêu cầu quyền ACCESS_FINE_LOCATION.

    Để đáp ứng kỳ vọng về quyền riêng tư của người dùng khi ứng dụng yêu cầu cấp quyền cho vị trí tương đối (và vị trí không chính xác), hệ thống sẽ không cung cấp thông tin ước tính về vị trí của người dùng chính xác hơn so với một khu phố.

  • Một số chế độ cài đặt thiết bị do Settings.System xác định hiện là chỉ có thể đọc. Nếu ứng dụng của bạn cố gắng ghi các thay đổi đối với các chế độ cài đặt được xác định trong Settings.System đã được chuyển sang Settings.Global, thao tác ghi sẽ tự động không thành công khi chạy trên Android 4.2 trở lên.

    Ngay cả khi giá trị của android:targetSdkVersionandroid:minSdkVersion thấp hơn 17, ứng dụng của bạn cũng không thể sửa đổi các cài đặt đã chuyển sang Settings.Global khi chạy trên Android 4.2 trở lên.

  • Nếu ứng dụng của bạn dùng WebView, Android 4.2 sẽ thêm một lớp bổ sung bảo mật để bạn có thể liên kết JavaScript với Mã Android. Nếu bạn đặt targetSdkVersion lên 17 trở lên, bạn hiện phải thêm chú thích @JavascriptInterface vào bất kỳ phương thức nào mà bạn muốn có sẵn cho JavaScript của bạn (phương thức này cũng phải được công khai). Nếu bạn không cung cấp chú thích, phương thức này không được trang web trong WebView của bạn truy cập khi chạy trên Android 4.2 trở lên. Nếu bạn đặt targetSdkVersion từ 16 trở xuống thì không bắt buộc phải thêm chú thích, nhưng bạn nên cập nhật phiên bản đích và thêm chú thích để tăng cường bảo mật.

    Đọc thêm về liên kết Mã JavaScript sang mã Android.

Daydream

Daydream là chế độ trình bảo vệ màn hình tương tác mới dành cho thiết bị Android. Quảng cáo này tự động kích hoạt khi thiết bị được cắm vào đế hoặc khi thiết bị ở trạng thái rảnh trong khi cắm nguồn vào bộ sạc (thay vì tắt màn hình). Daydream hiển thị mỗi lần một giấc mơ, mà có thể là một màn hình hoàn toàn trực quan, thụ động, loại bỏ khi chạm hoặc có thể tương tác và phản hồi cho toàn bộ sự kiện đầu vào. Giấc mơ của bạn chạy trong quy trình của ứng dụng và có toàn quyền truy cập vào bộ công cụ giao diện người dùng Android, bao gồm thành phần hiển thị, bố cục và ảnh động, để chúng linh hoạt hơn và mạnh mẽ hơn hình nền động hoặc tiện ích ứng dụng.

Bạn có thể tạo giấc mơ cho Daydream bằng cách triển khai một lớp con của DreamService. Các API DreamService là được thiết kế tương tự như Activity. Để chỉ định giao diện người dùng cho hãy truyền mã nhận dạng tài nguyên bố cục hoặc View đến setContentView() bất cứ lúc nào sau khi một cửa sổ, chẳng hạn như trong onAttachedToWindow() .

Lớp DreamService cung cấp lệnh gọi lại quan trọng khác trong vòng đời bên trên các API Service cơ sở, chẳng hạn như onDreamingStarted(), onDreamingStopped()onDetachedFromWindow(). Bạn không thể khởi tạo DreamService từ ứng dụng—được hệ thống khởi chạy tự động.

Nếu giấc mơ của bạn có tính tương tác, bạn có thể bắt đầu một hoạt động từ giấc mơ để đưa người dùng vào toàn bộ giao diện người dùng của ứng dụng để biết thêm thông tin chi tiết hoặc quyền kiểm soát. Bạn có thể sử dụng finish() để kết thúc giấc mơ đó để người dùng có thể thấy Hoạt động mới.

Để hệ thống có thể truy cập vào chế độ ngủ, hãy khai báo DreamService bằng phần tử <service> trong tệp kê khai. Sau đó, bạn phải thêm một bộ lọc ý định bằng thao tác "android.service.dreams.DreamService". Ví dụ:

<service android:name=".MyDream" android:exported="true"
    android:icon="@drawable/dream_icon" android:label="@string/dream_label" >
    <intent-filter>
        <action android:name="android.service.dreams.DreamService" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</service>

Có một số phương thức hữu ích khác trong DreamService cần lưu ý:

  • setInteractive(boolean) kiểm soát việc Giấc mơ nhận được các sự kiện đầu vào hoặc thoát ngay khi người dùng nhập. Nếu giấc mơ là thì người dùng có thể sử dụng nút Quay lại hoặc nút Màn hình chính để thoát khỏi chế độ ngủ hoặc bạn có thể gọi finish() để chấm dứt giấc mơ.
  • Nếu muốn một màn hình sống động hoàn toàn, bạn có thể gọi setFullscreen() để ẩn thanh trạng thái.
  • Trước khi Chế độ ngủ bắt đầu, màn hình sẽ giảm độ sáng để báo cho người dùng biết rằng hết thời gian chờ ở chế độ không hoạt động sắp tới. Nếu gọi setScreenBright(true), bạn có thể đặt màn hình ở độ sáng thông thường.

Để biết thêm thông tin, hãy xem tài liệu DreamService.

Màn hình phụ

Android hiện cho phép ứng dụng của bạn hiển thị nội dung độc đáo trên các màn hình khác được kết nối vào thiết bị của người dùng qua kết nối có dây hoặc Wi-Fi. Để tạo nội dung độc đáo cho màn hình phụ, hãy mở rộng Presentation lớp và triển khai lệnh gọi lại onCreate(). Bên trong onCreate(), chỉ định giao diện người dùng cho màn hình phụ bằng cách gọi setContentView(). Là một phần mở rộng của lớp Dialog, lớp Presentation cung cấp khu vực mà ứng dụng của bạn có thể hiển thị một giao diện người dùng riêng biệt trên màn hình phụ.

Cách phát hiện màn hình phụ mà bạn có thể hiển thị Presentation: sử dụng DisplayManager hoặc MediaRouter API. Mặc dù các API DisplayManager cho phép bạn liệt kê nhiều màn hình có thể được kết nối cùng lúc, bạn thường nên sử dụng MediaRouter để nhanh chóng truy cập vào màn hình mặc định của hệ thống bản trình bày.

Để có màn hình mặc định cho bản trình bày, hãy gọi MediaRouter.getSelectedRoute() và truyền vào đó ROUTE_TYPE_LIVE_VIDEO Thao tác này sẽ trả về một đối tượng MediaRouter.RouteInfo mô tả tuyến đường hiện được chọn của hệ thống cho các bản trình bày video. Nếu MediaRouter.RouteInfo không rỗng, gọi getPresentationDisplay() để lấy Display đại diện cho màn hình đã kết nối.

Sau đó, bạn có thể hiển thị bản trình bày của mình bằng cách truyền đối tượng Display cho một hàm khởi tạo cho lớp Presentation. Bản trình bày của bạn bây giờ sẽ xuất hiện trên màn hình phụ.

Để phát hiện thời điểm màn hình mới được kết nối trong thời gian chạy, hãy tạo một thực thể của MediaRouter.SimpleCallback để triển khai phương thức gọi lại onRoutePresentationDisplayChanged(). Hệ thống sẽ gọi phương thức này khi có một mới màn hình bản trình bày đã được kết nối. Sau đó, đăng ký MediaRouter.SimpleCallback bằng cách truyền tham số này đến MediaRouter.addCallback() cùng với loại tuyến ROUTE_TYPE_LIVE_VIDEO. Khi bạn nhận được cuộc gọi đến onRoutePresentationDisplayChanged(), bạn chỉ cần gọi MediaRouter.getSelectedRoute() như đề cập ở trên.

Để tối ưu hoá hơn nữa giao diện người dùng trong Presentation cho màn hình phụ, bạn có thể áp dụng một giao diện khác bằng cách chỉ định thuộc tính android:presentationTheme trong <style> mà bạn vừa áp dụng cho ứng dụng hoặc hoạt động của bạn.

Lưu ý rằng những màn hình được kết nối với thiết bị của người dùng thường có kích thước màn hình lớn hơn và có thể có mật độ màn hình khác. Vì đặc điểm màn hình có thể khác nhau, bạn nên cung cấp tài nguyên được tối ưu hoá dành riêng cho màn hình lớn như vậy. Nếu bạn cần để yêu cầu thêm tài nguyên qua Presentation, hãy gọi getContext().getResources() để lấy đối tượng Resources tương ứng với màn hình. Điều này mang lại các tài nguyên phù hợp nhất trong ứng dụng của bạn cho kích thước và mật độ màn hình của màn hình phụ.

Để biết thêm thông tin và một số mã mẫu, hãy xem Presentation tài liệu của lớp.

Tiện ích trên màn hình khoá

Android hiện cho phép người dùng thêm tiện ích ứng dụng vào màn hình khoá. Để cung cấp Tiện ích ứng dụng để dùng trên màn hình khoá, hãy thêm thuộc tính android:widgetCategory vào tệp XML chỉ định AppWidgetProviderInfo. Thuộc tính này hỗ trợ hai giá trị: home_screenkeyguard. Theo mặc định, thuộc tính này được đặt thành home_screen để người dùng có thể thêm tiện ích ứng dụng vào Màn hình chính. Nếu bạn muốn tiện ích ứng dụng của mình cũng xuất hiện trên khoá hãy thêm giá trị keyguard:

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    android:widgetCategory="keyguard|home_screen">
</appwidget-provider>

Bạn cũng nên chỉ định bố cục ban đầu cho tiện ích ứng dụng khi ở trên màn hình khoá bằng thuộc tính android:initialKeyguardLayout. API này hoạt động giống như android:initialLayout, ở chỗ nó cung cấp bố cục có thể xuất hiện ngay lập tức cho đến khi tiện ích ứng dụng của bạn được khởi chạy và có thể cập nhật của bạn.

Để biết thêm thông tin về cách tạo tiện ích ứng dụng cho màn hình khoá, bao gồm cả việc tạo tiện ích điều chỉnh kích thước tiện ích ứng dụng của mình khi màn hình khoá, hãy xem hướng dẫn Tiện ích ứng dụng.

Nhiều người dùng

Android hiện cho phép nhiều không gian người dùng trên các thiết bị có thể chia sẻ, chẳng hạn như máy tính bảng. Mỗi người dùng trên một thiết bị có tập hợp tài khoản, ứng dụng, chế độ cài đặt hệ thống, tệp riêng và bất kỳ nội dung nào khác dữ liệu liên quan đến người dùng.

Là nhà phát triển ứng dụng, bạn không cần phải làm gì khác để ứng dụng của bạn hoạt động phù hợp với nhiều người dùng trên một thiết bị. Bất kể có bao nhiêu người dùng trên dữ liệu mà ứng dụng của bạn lưu cho một người dùng cụ thể sẽ được tách biệt với dữ liệu mà ứng dụng của bạn lưu cho những người dùng khác. Hệ thống theo dõi xem dữ liệu người dùng nào thuộc về quy trình người dùng mà ứng dụng của bạn đang chạy và chỉ cung cấp cho ứng dụng quyền truy cập vào dữ liệu của người dùng đó và không cho phép quyền truy cập vào dữ liệu của người dùng khác.

Lưu dữ liệu trong môi trường nhiều người dùng

Bất cứ khi nào ứng dụng của bạn lưu lựa chọn ưu tiên của người dùng, tạo cơ sở dữ liệu hoặc ghi tệp vào bộ nhớ trong hoặc bộ nhớ ngoài, dữ liệu đó chỉ có thể truy cập được khi chạy với tư cách là người dùng đó.

Để đảm bảo ứng dụng của bạn hoạt động đúng cách trong môi trường nhiều người dùng, đừng tham khảo thư mục ứng dụng nội bộ hoặc vị trí bộ nhớ ngoài bằng đường dẫn được mã hoá cứng và thay vào đó luôn sử dụng các API thích hợp:

Bất kể bạn sử dụng API nào trong số các API này để lưu dữ liệu cho một người dùng cụ thể, dữ liệu đó sẽ không có thể truy cập trong khi chạy với tư cách là người dùng khác. Theo quan điểm của ứng dụng, mỗi người dùng đang chạy trên một thiết bị hoàn toàn riêng biệt.

Xác định người dùng trong môi trường nhiều người dùng

Nếu ứng dụng của bạn muốn xác định người dùng riêng biệt, chẳng hạn như để thu thập số liệu phân tích hoặc tạo tài khoản khác mối liên kết, bạn nên làm theo các phương pháp được đề xuất để xác định số lượt cài đặt riêng biệt. Bằng cách tạo một UUID mới khi ứng dụng của bạn bắt đầu cho lần đầu tiên, bạn chắc chắn sẽ có được một mã nhận dạng duy nhất để theo dõi từng người dùng, bất kể có bao nhiêu người người dùng cài đặt ứng dụng của bạn trên một thiết bị. Ngoài ra, bạn có thể lưu mã thông báo cục bộ được tìm nạp từ máy chủ của bạn hoặc sử dụng ID đăng ký do Giải pháp gửi thông báo qua đám mây của Google cung cấp.

Hãy lưu ý rằng nếu ứng dụng của bạn yêu cầu một trong các giá trị nhận dạng thiết bị phần cứng (chẳng hạn như địa chỉ MAC của Wi-Fi) địa chỉ hoặc số SERIAL), chúng sẽ cung cấp cùng một giá trị cho mỗi người dùng vì các giá trị nhận dạng này được liên kết với phần cứng chứ không phải người dùng. Chưa đề cập đến cái khác các vấn đề mà các định danh này đưa ra như được thảo luận trong phần Nhận dạng Bài đăng trên blog về Cài đặt ứng dụng.

Chế độ cài đặt chung mới

Các chế độ cài đặt hệ thống đã được cập nhật để hỗ trợ nhiều người dùng có thêm Settings.Global. Tập hợp các chế độ cài đặt này giống với chế độ cài đặt Settings.Secure vì chúng ở chế độ chỉ có thể đọc, nhưng áp dụng trên toàn bộ tất cả không gian người dùng trên thiết bị.

Một số chế độ cài đặt hiện tại đã được chuyển từ Settings.System hoặc Settings.Secure sang đây. Nếu ứng dụng của bạn là hiện đang thực hiện các thay đổi đối với chế độ cài đặt đã xác định trước đó trong Settings.System (chẳng hạn như AIRPLANE_MODE_ON), thì bạn sẽ nhận được làm như vậy sẽ không hoạt động trên thiết bị chạy Android 4.2 trở lên nếu các cài đặt đó là đã chuyển đến Settings.Global. Bạn có thể tiếp tục đọc các chế độ cài đặt trong Settings.Global, nhưng vì các chế độ cài đặt này không còn được coi là an toàn đối với ứng dụng thay đổi, việc cố gắng làm như vậy sẽ tự động không thực hiện được và hệ thống sẽ ghi cảnh báo để nhật ký hệ thống khi chạy ứng dụng của bạn trên Android 4.2 trở lên.

Hỗ trợ bố cục RTL

Android hiện cung cấp một số API cho phép bạn xây dựng giao diện người dùng một cách linh hoạt chuyển đổi hướng bố cục để hỗ trợ các ngôn ngữ sử dụng giao diện người dùng từ phải sang trái (RTL) và chức năng đọc chẳng hạn như tiếng Ả Rập và tiếng Do Thái.

Để bắt đầu hỗ trợ bố cục RTL trong ứng dụng, hãy đặt thuộc tính android:supportsRtl thành phần tử <application> trong tệp kê khai và đặt “true". Sau khi bạn bật, hệ thống sẽ bật nhiều API RTL để hiển thị ứng dụng của bạn theo bố cục RTL. Ví dụ: thanh tác vụ sẽ hiển thị biểu tượng và tiêu đề ở bên phải và các nút hành động ở bên trái, cũng như bất kỳ bố cục nào bạn đã tạo bằng các lớp View do khung cung cấp cũng sẽ được đảo ngược.

Nếu bạn cần tối ưu hoá hơn nữa giao diện của ứng dụng khi được hiển thị theo bố cục RTL, có hai cấp độ tối ưu hoá cơ bản:

  1. Chuyển đổi các thuộc tính bố cục hướng trái và phải thành bố cục hướng bắt đầu và kết thúc các thuộc tính.

    Ví dụ: sử dụng android:layout_marginStart thay cho android:layout_marginLeftandroid:layout_marginEnd thay cho android:layout_marginRight.

    Lớp RelativeLayout cũng cung cấp bố cục tương ứng để thay thế vị trí trái/phải, chẳng hạn như android:layout_alignParentStart thành thay thế android:layout_alignParentLeftandroid:layout_toStartOf thay vì android:layout_toLeftOf.

  2. Hoặc để cung cấp khả năng tối ưu hoá hoàn chỉnh cho bố cục RTL, bạn có thể cung cấp các thành phần hoàn toàn riêng biệt tệp bố cục bằng bộ hạn định tài nguyên ldrtl (ldrtl là viết tắt của cụm từ layout-direction từ phải sang trái}). Ví dụ: bạn có thể lưu các tệp bố cục mặc định trong res/layout/ và các bố cục được tối ưu hoá cho RTL trong res/layout-ldrtl/.

    Bộ hạn định ldrtl rất phù hợp với các tài nguyên có thể vẽ để bạn có thể cung cấp đồ hoạ được định hướng theo hướng tương ứng với hướng đọc.

Có nhiều API khác trên khung này để hỗ trợ bố cục RTL, chẳng hạn như trong lớp View để bạn có thể triển khai các hành vi phù hợp cho các khung hiển thị và trong Configuration để truy vấn hướng bố cục hiện tại.

Lưu ý: Nếu bạn đang sử dụng SQlite và có tên bảng hoặc tên cột "chỉ nhập số", là cẩn thận: việc sử dụng String.format(String, Object...) có thể dẫn đến lỗi nơi các số đã được chuyển đổi sang ngôn ngữ Ả Rập tương đương nếu thiết bị của bạn đã được đặt thành ngôn ngữ Ả Rập. Bạn phải sử dụng String.format(Locale,String,Object...) để đảm bảo số đang được giữ nguyên dưới dạng ASCII. Đồng thời sử dụng String.format("%d", int) thay vì sử dụng String.valueOf(int) cho số đang được định dạng.

Mảnh lồng nhau

Giờ đây, bạn có thể nhúng mảnh bên trong mảnh. Điều này hữu ích cho nhiều tình huống trong mà bạn muốn đặt các thành phần giao diện người dùng động và có thể sử dụng lại vào một thành phần giao diện người dùng chính là thành phần đó linh động và có thể tái sử dụng. Ví dụ: nếu bạn sử dụng ViewPager để tạo các mảnh vuốt sang trái và phải đồng thời chiếm phần lớn không gian màn hình, bạn có thể hãy chèn mảnh vào từng trang mảnh.

Để lồng một mảnh, bạn chỉ cần gọi getChildFragmentManager() bật Fragment mà bạn muốn thêm mảnh. Thao tác này sẽ trả về một FragmentManager mà bạn có thể sử dụng như bạn thường làm trong hoạt động cấp cao nhất để tạo các giao dịch mảnh. Ví dụ: dưới đây là một số mã thêm một mảnh từ bên trong một lớp Fragment hiện có:

Kotlin

val videoFragment = VideoPlayerFragment()
childFragmentManager.beginTransaction().apply {
    add(R.id.video_fragment, videoFragment)
    commit()
}

Java

Fragment videoFragment = new VideoPlayerFragment();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(R.id.video_fragment, videoFragment).commit();

Từ trong một mảnh lồng nhau, bạn có thể lấy thông tin tham chiếu đến mảnh mẹ bằng cách gọi getParentFragment().

Thư viện hỗ trợ Android hiện cũng hỗ trợ các mảnh lồng nhau, vì vậy, bạn có thể triển khai các mảnh lồng nhau thiết kế mảnh trên Android 1.6 trở lên.

Lưu ý: Bạn không thể tăng cường một bố cục thành một mảnh khi bố cục đó bao gồm một <fragment>. Các mảnh lồng nhau chỉ được hỗ trợ khi được thêm vào một mảnh một cách linh động.

RenderScript

Chức năng tính toán RenderScript đã được cải thiện với các tính năng sau:

Hàm nội tại của tập lệnh

Bạn có thể sử dụng các hàm nội tại tích hợp của tập lệnh Renderscript giúp triển khai các thao tác phổ biến cho bạn như:

Để sử dụng hàm nội tại của tập lệnh, hãy gọi phương thức create() tĩnh cho mỗi hàm nội tại để tạo một phiên bản của tập lệnh. Sau đó, bạn gọi cho set() có sẵn phương thức của mỗi tập lệnh hàm nội tại để đặt bất kỳ thông tin đầu vào và tuỳ chọn cần thiết nào. Cuối cùng, hãy gọi forEach() để thực thi tập lệnh.

Nhóm tập lệnh

ScriptGroup cho phép bạn liên kết các Renderscript liên quan với nhau và thực thi các tập lệnh đó bằng một lệnh gọi.

Sử dụng ScriptGroup.Builder để thêm tất cả tập lệnh vào nhóm bằng cách gọi addKernel(). Khi bạn thêm tất cả các tập lệnh, tạo kết nối giữa các bằng cách gọi addConnection(). Khi bạn đã thêm xong các kết nối, hãy gọi create() để tạo nhóm tập lệnh. Trước khi thực thi nhóm tập lệnh, hãy chỉ định dữ liệu đầu vào Allocation và tập lệnh ban đầu để chạy bằng Phương thức setInput(Script.KernelID, Allocation) và cung cấp dữ liệu đầu ra Allocation, nơi kết quả sẽ được ghi vào và tập lệnh cuối cùng vào chạy bằng setOutput(). Cuối cùng, hãy gọi execute() để chạy nhóm tập lệnh.

Tập lệnh bộ lọc

Filterscript xác định các quy tắc ràng buộc đối với các API Renderscript hiện có, cho phép chạy mã kết quả trên nhiều bộ xử lý khác nhau (CPU, GPU và DSP). Để tạo tệp Filterscript, hãy tạo .fs thay vì .rs tệp và chỉ định #pragma rs_fp_relaxed thành cho thời gian chạy Renderscript biết các tập lệnh của bạn không yêu cầu độ chính xác dấu phẩy động IEEE 754-2008 nghiêm ngặt. Độ chính xác này cho phép flush-to-zero đối với denorm và round-towards-zero. Ngoài ra, Filterscript các tập lệnh không được sử dụng loại tích hợp 32 bit và phải chỉ định hàm gốc tùy chỉnh bằng cách sử dụng hàm __attribute__((kernel)) vì Filterscript không hỗ trợ con trỏ chữ ký mặc định của hàm root() xác định.

Lưu ý: Mặc dù trong nền tảng có hỗ trợ Filterscript, nhưng nhà phát triển Tính năng hỗ trợ sẽ có trong Bản phát hành bộ công cụ SDK 21.0.1.

Để có cái nhìn chi tiết về tất cả các thay đổi đối với API trong Android 4.2, hãy xem Báo cáo khác biệt về API.