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 đặtandroid: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ặ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ả 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ềnACCESS_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 trongSettings.System
đã được chuyển sangSettings.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:targetSdkVersion
vàandroid: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 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, phương thức này không được trang web trongWebView
của bạn truy cập 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 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()
và 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ọ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. 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_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
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:
- Để truy cập vào bộ nhớ trong, hãy 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ố 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:
- 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 choandroid:layout_marginLeft
vàandroid:layout_marginEnd
thay choandroid: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_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 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ư:
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 choset()
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ọiforEach()
để 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()
. 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ọ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 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àmroot()
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.