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 dành 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 tốt hơn cho các thiết bị chạy Android 4.2, bạn nên đặt targetSdkVersion
thành "17"
, cài đặt ứng dụng đó trên hình ảnh hệ thống Android 4.2, kiểm thử ứng dụng đó, sau đó phát hành bản cập nhật có thay đổi này.
Bạn có thể sử dụng các 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ã để kiểm tra cấp độ API hệ thống trước khi thực thi các API không được minSdkVersion
hỗ trợ.
Để tìm hiểu thêm về việc duy trì khả năng tương thích ngược, hãy đọc bài viết Tạo giao diện người dùng có khả năng tương thích ngược.
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 độ?
Những thay đổi quan trọng về hành vi
Nếu trước đây bạn đã phát hành một ứng dụng cho Android, hãy lưu ý những thay đổi sau đây 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 của thuộc tính
android:exported
hiện là“false"
. Nếu quan trọng là các ứng dụng khác có thể truy cập vào nhà cung cấp nội dung của bạn, thì giờ đây, bạn phải đặt rõ ràngandroid:exported="true"
.Thay đổi này chỉ có hiệu lực nếu bạn đặt
android:targetSdkVersion
hoặcandroid: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ả 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ềnACCESS_FINE_LOCATION
.Để đáp ứng kỳ vọng về quyền riêng tư của người dùng khi ứng dụng của bạn yêu cầu quyền truy cập thông tin vị trí tương đối (chứ không phải thông tin vị trí chính xác), hệ thống sẽ không cung cấp thông tin ước tính vị trí của người dùng chính xác hơn một khu phố.
- Một số chế độ cài đặt thiết bị do
Settings.System
xác định hiện ở chế độ chỉ có thể đọc. Nếu ứng dụng của bạn cố gắng ghi các thay đổi đối với chế độ cài đặt được xác định trongSettings.System
đã chuyển sangSettings.Global
, thì thao tác ghi sẽ không thành công khi chạy trên Android 4.2 trở lên.Ngay cả khi giá trị của bạn cho
android:targetSdkVersion
vàandroid:minSdkVersion
thấp hơn 17, ứng dụng của bạn vẫn không thể sửa đổi các chế độ cài đặt đã chuyển sangSettings.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 đặttargetSdkVersion
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, trang web trongWebView
sẽ không truy cập được phương thức này khi chạy trên Android 4.2 trở lên. Nếu bạn đặttargetSdkVersion
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 một 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 giấc mơ, 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 bạn có một cửa sổ, chẳng hạn như từ lệnh gọi lại 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()
và onDetachedFromWindow()
.
Bạn không thể bắt đầu DreamService
từ ứng dụng của mình – hệ thống sẽ tự động khởi chạy DreamService
.
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 truy cập được 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>
Bạn cần lưu ý một số phương thức hữu ích khác trong DreamService
:
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ọifinish()
để 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. Khi 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ụ
Giờ đây, Android cho phép ứng dụng của bạn hiển thị nội dung riêng biệt trên các màn hình bổ sung được kết nối với 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 riêng biệt cho màn hình phụ, hãy mở rộng lớp Presentation
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ụ.
Để phát hiện màn hình phụ mà bạn có thể hiển thị Presentation
, hãy sử dụng API DisplayManager
hoặc MediaRouter
. 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.
Để lấy màn hình mặc định cho bản trình bày, hãy gọi MediaRouter.getSelectedRoute()
và truyền 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 đã chọn của hệ thống cho bản trình bày video. Nếu MediaRouter.RouteInfo
không phải là giá trị rỗng, hãy 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 bằng cách truyền đối tượng Display
vào 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 đó, hãy đăng ký MediaRouter.SimpleCallback
bằng cách truyền MediaRouter.SimpleCallback
vào MediaRouter.addCallback()
cùng với loại tuyến ROUTE_TYPE_LIVE_VIDEO
. Khi bạn nhận được lệnh gọi đến onRoutePresentationDisplayChanged()
, bạn chỉ cần gọi MediaRouter.getSelectedRoute()
như đã đề cập ở trên.
Để tối ưu hoá thêm 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 đã áp dụng cho ứng dụng hoặc hoạt động của mình.
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ác đặc điểm màn hình có thể khác nhau, nên bạn nên cung cấp các tài nguyên được tối ưu hoá riêng cho các màn hình lớn hơn như vậy. Nếu bạn cần yêu cầu tài nguyên bổ sung từ 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 cung cấp các tài nguyên thích hợp từ ứng dụng của bạn, phù hợp nhất với 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á. Để có thể sử dụng Tiện ích ứ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_screen
và keyguard
. Theo mặc định, thuộc tính này được đặt thành home_screen
để người dùng có thể thêm
vào Màn hình chính. Nếu bạn muốn tiện ích ứng dụng cũng có trên màn hình 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 ở 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ả cách định kích thước tiện ích ứng dụng khi ở màn hình khoá, hãy xem hướng dẫn về 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ẻ 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 làm gì khác để ứng dụng hoạt động đúng cách 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 một thiết bị, 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 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ỉ cấp cho ứng dụng quyền truy cập vào dữ liệu của người dùng đó, đồng thời không cho phép 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:
- Để truy cập vào bộ nhớ trong, hãy sử dụng
getFilesDir()
,getCacheDir()
hoặcopenFileOutput()
. - Để truy cập vào bộ nhớ ngoài, hãy dùng
getExternalFilesDir()
hoặcgetExternalStoragePublicDirectory()
.
Bất kể bạn sử dụng API nào trong số này để lưu dữ liệu cho một người dùng cụ thể, bạn sẽ không thể truy cập vào dữ liệu đó khi chạy dưới vai trò của một người dùng khác. Từ 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 khởi động lần đầu, bạn chắc chắn sẽ nhận đượ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 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 mình hoặc sử dụng mã nhận dạng đăng ký do Google Cloud Messaging 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 WiFi hoặc số SERIAL
), thì các giá trị này 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 liên kết với phần cứng chứ không phải người dùng. Chưa kể đến các vấn đề khác mà các giá trị nhận dạng này gây ra như đã thảo luận trong bài đăng trên blog Xác định lượt cài đặt ứng dụng.
Chế độ cài đặt chung mới
Chế độ cài đặt hệ thống đã được cập nhật để hỗ trợ nhiều người dùng bằng cách thêm Settings.Global
. Tập hợp chế độ cài đặt này tương tự như chế độ cài đặt Settings.Secure
vì các chế độ này chỉ có thể đọc, nhưng áp dụng trên toàn bộ cá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 để ứng dụng thay đổi, nên việc cố gắng thay đổi sẽ không thành công và hệ thống sẽ ghi một cảnh báo vào nhật ký hệ thống khi chạy ứng dụng 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 tạo giao diện người dùng chuyển đổi hướng bố cục một cách linh hoạt để hỗ trợ các ngôn ngữ sử dụng giao diện người dùng và hướng đọc từ phải sang trái (RTL), 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á thêm giao diện của ứng dụng khi hiển thị bằng bố cục RTL, có hai cấp độ tối ưu hoá cơ bản:
- 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 vìandroid:layout_marginLeft
vàandroid:layout_marginEnd
thay vìandroid:layout_marginRight
.Lớp
RelativeLayout
cũng cung cấp các thuộc tính bố cục tương ứng để thay thế vị trí trái/phải, chẳng hạn nhưandroid:layout_alignParentStart
để thay thếandroid:layout_alignParentLeft
vàandroid:layout_toStartOf
thay vìandroid:layout_toLeftOf
. - 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 trongres/layout/
và các bố cục được tối ưu hoá cho RTL trongres/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 trong nhiều trường hợp 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 vốn đã động và có thể sử dụng lại. 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ình thường từ hoạt động cấp cao nhất để tạo giao dịch mảnh. Ví dụ: dưới đây là một số mã thêm một mảnh từ trong 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ừ bên trong một mảnh lồng nhau, bạn có thể 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 bố cục thành một mảnh khi bố cục đó chứa <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ư:
Blends
Blur
Color matrix
3x3 convolve
5x5 convolve
Per-channel lookup table
Converting an Android YUV buffer to RGB
Để 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 các phương thứcset()
có sẵn của mỗi tập lệnh nội tại để đặt mọi tuỳ chọn và dữ liệu đầu vào cần thiết. Cuối cùng, hãy gọi phương thứcforEach()
để 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ọiaddKernel()
. Sau khi bạn thêm tất cả tập lệnh, hãy tạo kết nối giữa các tập lệnh bằng cách gọiaddConnection()
. Khi bạn đã thêm xong các kết nối, hãy gọicreate()
để 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àoAllocation
và tập lệnh ban đầu để chạy bằng Phương thứcsetInput(Script.KernelID, Allocation)
và cung cấp dữ liệu đầu raAllocation
, nơi kết quả sẽ được ghi vào và tập lệnh cuối cùng vào chạy bằngsetOutput()
. Cuối cùng, hãy gọiexecute()
để 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 mã thu được chạy trên nhiều bộ xử lý hơn (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àmroot()
xác định.
Lưu ý: Mặc dù tính năng hỗ trợ Filterscript có trong nền tảng, nhưng tính năng hỗ trợ nhà phát triển sẽ có trong Bản phát hành Bộ công cụ SDK 21.0.1.
Để xem thông tin chi tiết về tất cả thay đổi đối với API trong Android 4.2, hãy xem Báo cáo điểm khác biệt về API.