Android 9 (API ระดับ 28) เปิดตัวฟีเจอร์และความสามารถใหม่ๆ ที่ยอดเยี่ยมสำหรับผู้ใช้และนักพัฒนาแอป เอกสารนี้จะไฮไลต์ข้อมูลใหม่ๆ สำหรับนักพัฒนาแอป
หากต้องการดูข้อมูลเกี่ยวกับ API ใหม่ โปรดอ่านรายงานความแตกต่างของ API หรือไปที่ข้อมูลอ้างอิง Android API นอกจากนี้ โปรดดูการเปลี่ยนแปลงลักษณะการทํางานของ Android 9 เพื่อดูข้อมูลเกี่ยวกับด้านต่างๆ ที่การเปลี่ยนแปลงแพลตฟอร์มอาจส่งผลต่อแอปของคุณ
ตำแหน่งในอาคารด้วย RTT ของ Wi-Fi

Android 9 เพิ่มการรองรับแพลตฟอร์มสำหรับ IEEE 802.11-2016 Wi-Fi หรือที่เรียกอีกอย่างว่าระยะเวลาเดินทางของ Wi-Fi (RTT) เพื่อให้คุณใช้ประโยชน์ได้ ของตำแหน่งในอาคารในแอปของคุณ
ในอุปกรณ์ที่ใช้ Android 9 ที่รองรับฮาร์ดแวร์ แอปสามารถใช้
RTT API เพื่อวัด
ระยะทางไปยังจุดเข้าใช้งาน Wi-Fi (AP) ที่ใช้ RTT ใกล้เคียง อุปกรณ์จะต้องมี
บริการตำแหน่งเปิดอยู่และเปิดการสแกนหา Wi-Fi (ภายใต้
การตั้งค่า > ตำแหน่ง) และแอปของคุณต้องมี
ACCESS_FINE_LOCATION
สิทธิ์ อุปกรณ์ไม่จำเป็นต้องเชื่อมต่อกับจุดเข้าใช้งานเพื่อใช้ RTT
เพื่อรักษาความเป็นส่วนตัว จะมีเพียงโทรศัพท์เท่านั้นที่สามารถกำหนดระยะห่างไปยัง
จุดเข้าใช้งาน; จุดเข้าใช้งานไม่มีข้อมูลนี้
หากอุปกรณ์วัดระยะทางไปยังจุดเข้าใช้งานตั้งแต่ 3 จุดขึ้นไป คุณสามารถใช้อัลกอริทึมการหาตำแหน่งแบบหลายแหล่งที่มาเพื่อประมาณตำแหน่งของอุปกรณ์ที่ตรงกับค่าการวัดเหล่านั้นมากที่สุด โดยปกติแล้ว ผลลัพธ์จะมีความแม่นยำภายใน 1-2 เมตร
ความแม่นยำนี้ช่วยให้คุณสร้างประสบการณ์ใหม่ๆ ได้ เช่น ระบบนำทางในอาคาร และบริการตามตำแหน่งแบบละเอียด เช่น การควบคุมด้วยเสียงที่มีความชัดเจน (เช่น "เปิดไฟนี้") และข้อมูลที่อิงตามตำแหน่ง (เช่น "ผลิตภัณฑ์นี้มีข้อเสนอพิเศษไหม")
ดู Wi-Fi RTT API ที่ใช้งานอยู่ใน แอปเดโม Android WifiRttScan
ดูข้อมูลเพิ่มเติมได้ที่ตำแหน่ง Wi-Fi: การระบุตำแหน่งด้วย RTT
การรองรับหน้าจอรอยบาก

การทดสอบส่วนที่ถูกตัดออกของจอแสดงผลโดยใช้โปรแกรมจำลอง
Android 9 รองรับหน้าจอแบบไร้ขอบล่าสุดที่มีรอยบากสำหรับกล้องและลำโพง
DisplayCutout
จะช่วยให้คุณสามารถหาตำแหน่งและรูปร่างของพื้นที่ไม่ทำงาน
เนื้อหานั้นไม่ควรจะแสดง เพื่อหาการมีอยู่และตำแหน่งของ
บริเวณรอยบากเหล่านี้ ให้ใช้
getDisplayCutout()
แอตทริบิวต์เลย์เอาต์หน้าต่างใหม่
layoutInDisplayCutoutMode
ทำให้แอปวางเค้าโครงเนื้อหารอบๆ รอยบากของอุปกรณ์ได้ คุณสามารถกำหนด
แอตทริบิวต์นี้ให้กับค่าใดค่าหนึ่งต่อไปนี้
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
คุณจำลองการเจาะรูบนหน้าจอในอุปกรณ์หรือโปรแกรมจำลองที่ใช้ Android 9 ได้ดังนี้
- เปิดใช้ตัวเลือกสำหรับนักพัฒนาแอป
- ในหน้าจอตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์ ให้เลื่อนลงไปที่ส่วนการวาด แล้วเลือกจำลองการแสดงผลที่มีรอยบาก
- เลือกขนาดของส่วนที่ถูกตัดออก
การแจ้งเตือน
Android 9 มีการปรับปรุงการแจ้งเตือนหลายอย่าง ซึ่งทั้งหมดนี้พร้อมใช้งานสำหรับนักพัฒนาแอปที่กําหนดเป้าหมายเป็น API ระดับ 28 ขึ้นไป

MessagingStyle ที่มีรูปภาพแนบอยู่

MessagingStyle ที่มีคำตอบและการสนทนา
ดูโค้ดตัวอย่างที่ใช้การแจ้งเตือน รวมถึงฟีเจอร์ของ Android 9 ได้ที่ตัวอย่างผู้คน
ประสบการณ์การรับส่งข้อความที่ดีขึ้น
เริ่มตั้งแต่ Android 7.0 (API ระดับ 24) เป็นต้นไป คุณสามารถเพิ่มการทำงานเพื่อตอบกลับข้อความหรือป้อนข้อความอื่นๆ จากการแจ้งเตือนโดยตรงได้ Android 9 ปรับปรุงฟีเจอร์นี้ด้วยการเพิ่มประสิทธิภาพต่อไปนี้
การรองรับผู้เข้าร่วมการสนทนาแบบง่าย: ระบบจะใช้คลาส
Person
เพื่อระบุบุคคลที่มีส่วนร่วมในการสนทนา ซึ่งรวมถึงรูปโปรไฟล์และ URI API อื่นๆ อีกมากมาย เช่นaddMessage()
ใช้ประโยชน์จากคลาสPerson
แทนCharSequence
แล้ว ชั้นเรียนPerson
ยังรองรับรูปแบบการออกแบบของเครื่องมือสร้างอีกด้วยการรองรับรูปภาพ: ตอนนี้ Android 9 จะแสดงรูปภาพในการแจ้งเตือนการรับส่งข้อความบนโทรศัพท์ คุณสามารถใช้
setData()
บนข้อความเพื่อแสดงรูปภาพ ข้อมูลโค้ดต่อไปนี้แสดงวิธีสร้างPerson
และข้อความที่มีรูปภาพ
Kotlin
// Create new Person. val sender = Person() .setName(name) .setUri(uri) .setIcon(null) .build() // Create image message. val message = Message("Picture", time, sender) .setData("image/", imageUri) val style = Notification.MessagingStyle(getUser()) .addMessage("Check this out!", 0, sender) .addMessage(message)
Java
// Create new Person. Person sender = new Person() .setName(name) .setUri(uri) .setIcon(null) .build(); // Create image message. Message message = new Message("Picture", time, sender) .setData("image/", imageUri); Notification.MessagingStyle style = new Notification.MessagingStyle(getUser()) .addMessage("Check this out!", 0, sender) .addMessage(message);
บันทึกการตอบกลับเป็นร่าง: แอปจะดึงข้อมูล
EXTRA_REMOTE_INPUT_DRAFT
ที่ระบบส่งเมื่อผู้ใช้ปิดการแจ้งเตือนการรับส่งข้อความโดยไม่ตั้งใจ คุณสามารถใช้ส่วนเสริมนี้เพื่อเติมช่องข้อความล่วงหน้าในแอปเพื่อให้ผู้ใช้ เสร็จสิ้นการตอบกลับระบุว่าการสนทนาเป็นการสนทนากลุ่มหรือไม่: คุณสามารถใช้
setGroupConversation()
เพื่อระบุว่าการสนทนาเป็นการสนทนากลุ่มหรือไม่ตั้งค่าการทำงานเชิงความหมายสำหรับความตั้งใจ ดังนี้
setSemanticAction()
ช่วยให้คุณให้ความหมายแก่การกระทำ เช่น "ทำเครื่องหมายว่าอ่านแล้ว" "ลบ" "ตอบกลับ" เป็นต้นการตอบกลับอัจฉริยะ: Android 9 รองรับการตอบกลับที่แนะนำแบบเดียวกับที่มีในแอปการรับส่งข้อความ ใช้ตัวเลือกนี้
RemoteInput.setChoices()
เพื่อแสดงคำตอบมาตรฐานต่างๆ แก่ผู้ใช้
การตั้งค่าช่อง การออกอากาศ และโหมดห้ามรบกวน
Android 8.0 เปิดตัวช่องทางการแจ้งเตือน ซึ่งช่วยให้คุณสามารถสร้าง ช่องทางที่ผู้ใช้กำหนดเองได้สำหรับการแจ้งเตือนแต่ละประเภทที่คุณต้องการแสดง Android 9 ลดความซับซ้อนของการตั้งค่าช่องทางการแจ้งเตือนด้วยการเปลี่ยนแปลงต่อไปนี้
การบล็อก Channel Group: ตอนนี้ผู้ใช้สามารถบล็อก Channel Group ทั้งหมดได้ภายในการตั้งค่าการแจ้งเตือนสำหรับแอป คุณสามารถใช้เมธอด
isBlocked()
เพื่อระบุว่ามีการบล็อก Channel Group หรือไม่ ซึ่งจะส่งผลให้ไม่มีการส่งการแจ้งเตือนสำหรับแชแนลในกลุ่มนั้นนอกจากนี้ แอปยังค้นหาการตั้งค่า Channel Group ปัจจุบันได้โดยใช้ ใหม่
getNotificationChannelGroup()
ประเภทจุดประสงค์ในการออกอากาศใหม่: ตอนนี้ระบบ Android จะส่งรายการทดสอบ เมื่อสถานะการบล็อกของช่องทางการแจ้งเตือนและ Channel Group เปลี่ยนแปลง แอปที่เป็นเจ้าของแชแนลหรือกลุ่มที่ถูกบล็อกจะฟังความตั้งใจเหล่านี้และดำเนินการตามความเหมาะสมได้ หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการดำเนินการผ่าน Intent เหล่านี้ และส่วนเสริมเพิ่มเติม โปรดดูรายการค่าคงที่ที่อัปเดตแล้วใน
NotificationManager
ข้อมูลอ้างอิง ดูข้อมูลเกี่ยวกับการตอบสนองต่อ Intent ของประกาศได้ที่ประกาศNotificationManager.Policy
มีหมวดหมู่ลำดับความสำคัญ "ห้ามรบกวน" ใหม่ 3 หมวดหมู่ ดังนี้PRIORITY_CATEGORY_ALARMS
ให้ความสำคัญกับสัญญาณเตือนPRIORITY_CATEGORY_MEDIA
จัดลำดับความสำคัญของเสียงจากแหล่งที่มาของสื่อ เช่น การนำทางของสื่อและการนำทางด้วยเสียงPRIORITY_CATEGORY_SYSTEM
ให้ความสำคัญกับเสียงของระบบ
NotificationManager.Policy
ยังมีค่าคงที่ห้ามรบกวนใหม่ 7 รายการที่คุณสามารถใช้เพื่อระงับการขัดจังหวะด้วยภาพSUPPRESSED_EFFECT_FULL_SCREEN_INTENT
ป้องกันไม่ให้การแจ้งเตือนเปิดกิจกรรมแบบเต็มหน้าจอSUPPRESSED_EFFECT_LIGHTS
บล็อกไฟแจ้งเตือนSUPPRESSED_EFFECT_PEEK
ป้องกันไม่ให้เลื่อนการแจ้งเตือนมาแสดงเป็นเวลาสั้นๆ ("การแสดงชั่วครู่")SUPPRESSED_EFFECT_STATUS_BAR
ป้องกันไม่ให้มีการแจ้งเตือนปรากฏในแถบสถานะบนอุปกรณ์ที่รองรับแถบสถานะSUPPRESSED_EFFECT_BADGE
บล็อกป้ายในอุปกรณ์ที่รองรับป้าย ดูข้อมูลเพิ่มเติมได้ที่ แก้ไขป้ายการแจ้งเตือนSUPPRESSED_EFFECT_AMBIENT
บล็อกการแจ้งเตือนในอุปกรณ์ที่รองรับหน้าจอแอมเบียนท์SUPPRESSED_EFFECT_NOTIFICATION_LIST
ป้องกันไม่ให้การแจ้งเตือนปรากฏในมุมมองรายการบนอุปกรณ์ที่รองรับมุมมองรายการ เช่น หน้าต่างแจ้งเตือนหรือหน้าจอล็อก
การรองรับกล้องหลายตัวและการอัปเดตกล้อง
ในอุปกรณ์ที่ใช้ Android 9 คุณจะเข้าถึงสตรีมจากกล้องจริงอย่างน้อย 2 ตัวพร้อมกันได้ ในอุปกรณ์ที่มีกล้องหน้าคู่หรือกล้องหลังคู่ คุณสามารถสร้างฟีเจอร์ใหม่ๆ ที่กล้องตัวเดียวทำไม่ได้ เช่น การซูมแบบต่อเนื่อง โบเก้ และภาพสามมิติ นอกจากนี้ API ยังให้คุณเรียกใช้สตรีมกล้องแบบตรรกะหรือแบบรวมที่สลับระหว่างกล้อง 2 ตัวขึ้นไปโดยอัตโนมัติ
การปรับปรุงอื่นๆ ในกล้อง ได้แก่ พารามิเตอร์เซสชันเพิ่มเติมที่ช่วยลดความล่าช้าระหว่างการจับภาพครั้งแรก และการแชร์พื้นผิวที่ช่วยให้ลูกค้ากล้องจัดการกรณีการใช้งานต่างๆ ได้โดยไม่ต้องหยุดและเริ่มสตรีมมิงกล้อง นอกจากนี้ เรายังได้เพิ่ม API สำหรับ Flash ที่แสดงผลด้วย การสนับสนุน และเข้าถึง OIS การประทับเวลา สำหรับระบบกันภาพสั่นและเอฟเฟกต์พิเศษระดับแอป
ใน Android 9 กล้องหลายตัว
API
รองรับกล้องโมโนโครมสำหรับอุปกรณ์ที่มี
FULL
หรือ
ความสามารถ LIMITED
เอาต์พุตแบบโมโนโครมจะทำผ่าน
YUV_420_888
ที่มี Y เป็นโทนสีเทา U (Cb) เป็น 128 และ V (Cr) เป็น 128
Android 9 ยังรองรับ USB/UVC ภายนอกด้วย กล้องเปิดอยู่ อุปกรณ์ที่รองรับ
ImageDecoder สำหรับรูปภาพที่วาดได้และบิตแมป
Android 9 เปิดตัว
ImageDecoder
ซึ่งมีวิธีการถอดรหัสรูปภาพที่ทันสมัย ใช้ชั้นเรียนนี้
แทน BitmapFactory
และ BitmapFactory.Options
API
ImageDecoder
ช่วยให้คุณสร้าง Drawable
หรือ Bitmap
จากบัฟเฟอร์ไบต์ ไฟล์ หรือ URI ได้ หากต้องการถอดรหัสรูปภาพ ให้โทรไปที่ createSource()
ก่อนโดยระบุแหล่งที่มาของรูปภาพที่เข้ารหัส จากนั้นโทร
decodeDrawable()
หรือ decodeBitmap()
โดยส่ง ImageDecoder.Source
เพื่อสร้าง Drawable
หรือ Bitmap
หากต้องการเปลี่ยน
การตั้งค่าเริ่มต้น ส่ง OnHeaderDecodedListener
ไปที่
decodeDrawable()
หรือ decodeBitmap()
โทร ImageDecoder
ครั้ง
onHeaderDecoded()
ด้วยความกว้างและความสูงเริ่มต้นของภาพ เมื่อทราบค่าแล้ว
หากรูปภาพที่เข้ารหัสเป็น GIF แบบเคลื่อนไหวหรือ WebP แล้ว decodeDrawable()
จะแสดงผล
Drawable
ที่เป็นอินสแตนซ์ของ
AnimatedImageDrawable
คุณใช้วิธีต่างๆ ในการตั้งค่าคุณสมบัติของรูปภาพได้ ดังนี้
- หากต้องการปรับขนาดรูปภาพที่ถอดรหัสให้มีขนาดที่แน่นอน ให้ส่งขนาดเป้าหมายไปยัง
setTargetSize()
นอกจากนี้ คุณยังปรับขนาดรูปภาพโดยใช้ขนาดตัวอย่างได้อีกด้วย ส่งขนาดตัวอย่างไปยังsetTargetSampleSize()
- หากต้องการครอบตัดรูปภาพภายในช่วงของรูปภาพที่ปรับขนาดแล้ว ให้เรียกใช้
setCrop()
- หากต้องการสร้างบิตแมปที่เปลี่ยนแปลงได้ ให้ส่ง
true
ไปยังsetMutableRequired()
ImageDecoder
ยังให้คุณเพิ่มเอฟเฟกต์ที่กำหนดเองและซับซ้อนให้กับรูปภาพได้ด้วย
เช่น มุมโค้งมน หรือ
และมาสก์วงกลม ใช้
setPostProcessor()
ที่มีอินสแตนซ์
PostProcessor
เพื่อเรียกใช้คำสั่งการวาดที่คุณต้องการ
แอนิเมชัน
Android 9 เปิดตัว
AnimatedImageDrawable
สำหรับการวาดภาพและแสดงภาพเคลื่อนไหว GIF และ WebP
AnimatedImageDrawable
ทํางานคล้ายกับ
AnimatedVectorDrawable
ตรงที่เธรดแสดงผลจะขับเคลื่อนภาพเคลื่อนไหวของ AnimatedImageDrawable
และเธรดแสดงผลยังใช้เธรดผู้ทํางานเพื่อถอดรหัสด้วย เพื่อไม่ให้การถอดรหัสรบกวนการดําเนินการอื่นๆ ในเธรดแสดงผล การติดตั้งใช้งานนี้
แอปของคุณให้แสดงภาพเคลื่อนไหวโดยไม่ต้องจัดการการอัปเดต หรือ
การรบกวนเหตุการณ์อื่นๆ ในชุดข้อความ UI ของแอป
AnimatedImageDrawable
สามารถถอดรหัสได้โดยใช้อินสแตนซ์ของ
ImageDecoder
ข้อมูลโค้ดต่อไปนี้แสดงวิธีใช้ ImageDecoder
เพื่อถอดรหัส AnimatedImageDrawable
Kotlin
@Throws(IOException::class) private fun decodeImage() { val decodedAnimation = ImageDecoder.decodeDrawable( ImageDecoder.createSource(resources, R.drawable.my_drawable)) // Prior to start(), the first frame is displayed. (decodedAnimation as? AnimatedImageDrawable)?.start() }
Java
private void decodeImage() throws IOException { Drawable decodedAnimation = ImageDecoder.decodeDrawable( ImageDecoder.createSource(getResources(), R.drawable.my_drawable)); if (decodedAnimation instanceof AnimatedImageDrawable) { // Prior to start(), the first frame is displayed. ((AnimatedImageDrawable) decodedAnimation).start(); } }
ImageDecoder
มีวิธีการหลายวิธีที่ช่วยให้คุณแก้ไขรูปภาพเพิ่มเติมได้
ตัวอย่างเช่น คุณสามารถใช้
setPostProcessor()
เพื่อแก้ไขรูปลักษณ์ของรูปภาพ เช่น การใช้มาสก์วงกลม หรือ
มุมโค้งมน
วิดีโอ HDR VP9, การบีบอัดรูปภาพ HEIF และ API ของสื่อ
Android 9 มีการรองรับในตัวสำหรับ High Dynamic Range (HDR) VP9 โปรไฟล์ 2 เพื่อให้คุณส่งภาพยนตร์ที่เปิดใช้ HDR ไปยังผู้ใช้ของคุณจาก YouTube, Play Movies ได้ และแหล่งที่มาอื่นๆ บนอุปกรณ์ที่รองรับ HDR
นอกจากนี้ Android 9 ยังรองรับการเข้ารหัสรูปภาพโดยใช้รูปแบบไฟล์รูปภาพประสิทธิภาพสูง (HEIF หรือ HEIC) ซึ่งจะปรับปรุงการบีบอัดและลดพื้นที่เก็บข้อมูล รวมถึงการใช้อินเทอร์เน็ต ระบบรองรับตัวอย่างภาพนิ่ง HEIF ใน
MediaMuxer
และ MediaExtractor
ใหม่ อุปกรณ์ Android 9 รองรับแพลตฟอร์มนี้ ทำให้คุณส่งและใช้รูปภาพ HEIF จากเซิร์ฟเวอร์แบ็กเอนด์ได้ง่ายๆ หลังจากตรวจสอบแล้วว่า
แอปเข้ากันได้กับรูปแบบข้อมูลนี้สำหรับการแชร์และแสดงผล ลองใช้ HEIF
เป็นรูปแบบพื้นที่เก็บข้อมูลรูปภาพในแอปของคุณ คุณสามารถแปลง jpeg เป็น heic
โดยใช้ ImageDecoder
หรือ
BitmapFactory
(ซึ่งได้รับ
บิตแมปจากไฟล์ JPEG) จากนั้นคุณสามารถใช้
HeifWriter
เพื่อเขียน HEIF
ภาพนิ่งจากบัฟเฟอร์ไบต์ YUV หรืออินสแตนซ์ของ
Surface
หรือ
Bitmap
คุณสามารถดูเมตริกสื่อได้จาก
AudioTrack
AudioRecord
และ MediaDrm
ชั้นเรียน
Android 9 เปิดตัวเมธอดในคลาส MediaDRM
เพื่อรับเมตริก ระดับ HDCP ระดับความปลอดภัย และจำนวนเซสชัน รวมถึงเพิ่มการควบคุมระดับความปลอดภัยและการหยุดอย่างปลอดภัย ดูความแตกต่างของ API
เพื่อดูรายละเอียด
ใน Android 9 AAudio API จะเพิ่ม
รองรับแอตทริบิวต์ AAudioStream เพิ่มเติมหลายอย่าง รวมถึงการใช้งานและเนื้อหา
ประเภท และอินพุตที่กำหนดล่วงหน้า เมื่อใช้แอตทริบิวต์เหล่านี้ คุณจะสร้างสตรีมที่
สำหรับแอปพลิเคชัน VoIP หรือกล้องวิดีโอ นอกจากนี้คุณยังตั้งรหัสเซสชันเป็น
เชื่อมโยงสตรีม AAudio กับรีมิกซ์ที่ใช้เอฟเฟกต์ได้ ใช้เมนู
AudioEffect
API ในการควบคุม
เอฟเฟกต์
Android 9 เปิดตัว
AudioEffect
API สำหรับ
การประมวลผลแบบไดนามิก
คลาสนี้ช่วยให้คุณสร้างเอฟเฟกต์เสียงตามช่องได้ ซึ่งรวมถึงการปรับแต่ง การทำให้เป็นคอมเพรสเซอร์แบบหลายย่านความถี่ และลิมิตเตอร์ในหลายขั้นตอน
สามารถกำหนดค่าย่านความถี่และระยะแอ็กทีฟได้ และพารามิเตอร์ส่วนใหญ่สามารถ
ควบคุมแบบเรียลไทม์
ความละเอียดอ่อนของต้นทุนข้อมูลใน JobScheduler
เริ่มตั้งแต่ Android 9 JobScheduler
สามารถใช้สัญญาณสถานะเครือข่ายที่ได้รับจากผู้ให้บริการ เพื่อปรับปรุงการจัดการ
ของงานที่เกี่ยวข้องกับเครือข่าย
งานสามารถประกาศขนาดข้อมูลโดยประมาณ การรับสัญญาณล่วงหน้า และระบุข้อกำหนดเครือข่ายโดยละเอียด JobScheduler
จะจัดการงานตาม
สถานะเครือข่าย เช่น เมื่อเครือข่ายส่งสัญญาณว่ามีคนหนาแน่น
JobScheduler
อาจเลื่อนคำขอเครือข่ายขนาดใหญ่ เมื่อใช้เครือข่ายแบบไม่จำกัดปริมาณ JobScheduler
จะเรียกใช้งานการอ่านล่วงหน้าเพื่อปรับปรุงประสบการณ์ของผู้ใช้ เช่น โดยการอ่านหัวข้อล่วงหน้า
เมื่อเพิ่มงาน ให้ใช้ setEstimatedNetworkBytes()
,
setPrefetch()
และ setRequiredNetwork()
ตามความเหมาะสมเพื่อช่วยJobScheduler
จัดการงานอย่างถูกต้อง เมื่องานของคุณเสร็จสิ้น
ให้ใช้ออบเจ็กต์ Network
ส่งคืนโดย
JobParameters.getNetwork()
มิเช่นนั้น ระบบจะใช้เครือข่ายเริ่มต้นของอุปกรณ์โดยปริยาย ซึ่งอาจไม่เป็นไปตามข้อกำหนดของคุณและทำให้อินเทอร์เน็ตหมดโดยไม่ได้ตั้งใจ
API เครือข่ายระบบประสาท 1.1
เปิดตัว Neural Networks API ใน Android 8.1 (API ระดับ 27) เพื่อเร่งการทำงานแมชชีนเลิร์นนิงในอุปกรณ์ Android Android 9 ขยายและปรับปรุง API โดยเพิ่มการรองรับการดำเนินการใหม่ 9 รายการ ดังนี้
- การดำเนินการทางคณิตศาสตร์ที่ฉลาดตามองค์ประกอบ:
- การดำเนินการกับอาร์เรย์
ปัญหาที่ทราบแล้ว: เมื่อผ่าน
ANEURALNETWORKS_TENSOR_QUANT8_ASYMM
Tensor ไปยัง
ANEURALNETWORKS_PAD
ซึ่งพร้อมใช้งานใน Android 9 ขึ้นไป
เอาต์พุตจาก NNAPI อาจไม่ตรงกับผลลัพธ์จากเครื่องในระดับที่สูงกว่า
กรอบการเรียนรู้ เช่น
TensorFlow Lite คุณ
ควรที่จะผ่านเท่านั้น
ANEURALNETWORKS_TENSOR_FLOAT32
จนกว่าปัญหาจะได้รับการแก้ไข
นอกจากนี้ API ยังมีฟังก์ชันใหม่
ANeuralNetworksModel_relaxComputationFloat32toFloat16()
ซึ่งให้คุณระบุได้ว่าจะคำนวณ
ANEURALNETWORKS_TENSOR_FLOAT32
มีช่วงและความแม่นยำต่ำเท่ากับจุดลอยตัว 16 บิต IEEE 754
เฟรมเวิร์กการป้อนข้อความอัตโนมัติ
Android 9 มีการปรับปรุงหลายอย่างที่บริการป้อนข้อความอัตโนมัติสามารถนำไปใช้เพื่อปรับปรุงประสบการณ์ของผู้ใช้ให้ดียิ่งขึ้นเมื่อกรอกแบบฟอร์ม ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้ฟีเจอร์ป้อนข้อความอัตโนมัติในแอปได้จากคู่มือเฟรมเวิร์กการป้อนข้อความอัตโนมัติ
การปรับปรุงการรักษาความปลอดภัย
Android 9 นำเสนอคุณลักษณะด้านความปลอดภัยมากมาย ส่วนต่อไปนี้จะสรุป
Android Protected Confirmation
อุปกรณ์ที่รองรับซึ่งใช้ Android 9 ขึ้นไปจะช่วยให้คุณใช้การยืนยันที่ปลอดภัยของ Android ได้ เมื่อใช้เวิร์กโฟลว์นี้ แสดงข้อความแจ้งแก่ผู้ใช้ เพื่อขอให้ผู้ใช้อนุมัติข้อความสั้นๆ ข้อความนี้ช่วยให้แอปยืนยันอีกครั้งว่าผู้ใช้ต้องการทำธุรกรรมที่มีความละเอียดอ่อนให้เสร็จสมบูรณ์ เช่น การชำระเงิน
หากผู้ใช้ยอมรับข้อความดังกล่าว Android Keystore จะได้รับและจัดเก็บลายเซ็นการเข้ารหัสที่ได้รับการปกป้องโดยรหัสการตรวจสอบสิทธิ์ข้อความแฮชที่มีการคีย์ (HMAC) หลังจาก Android Keystore ยืนยันความถูกต้องของข้อความแล้ว แอปของคุณจะใช้คีย์ที่สร้างขึ้นจาก trustedConfirmationRequired
ในสภาพแวดล้อมการทํางานที่เชื่อถือได้ (TEE) เพื่อรับรองข้อความที่ผู้ใช้ยอมรับได้
ลายเซ็นนั้นแสดงถึงความมั่นใจสูงว่าผู้ใช้ได้เห็น
และได้ยอมรับข้อกำหนดดังกล่าว
ข้อควรระวัง: การยืนยันที่ปลอดภัยของ Android ไม่ได้เป็นช่องทางข้อมูลที่ปลอดภัยสำหรับผู้ใช้ แอปของคุณไม่สามารถคาดเดาได้ การรับประกันการรักษาข้อมูลที่เป็นความลับนอกเหนือจากที่แพลตฟอร์ม Android มีให้ โดยเฉพาะอย่างยิ่ง อย่าใช้เวิร์กโฟลว์นี้เพื่อแสดงข้อมูลที่ละเอียดอ่อนซึ่งปกติแล้วคุณจะไม่แสดงในอุปกรณ์ของผู้ใช้
ดูคำแนะนำเกี่ยวกับการเพิ่มการรองรับการยืนยันที่ปลอดภัยของ Android ได้ที่คู่มือการยืนยันที่ปลอดภัยของ Android
กล่องโต้ตอบการตรวจสอบสิทธิ์ด้วยข้อมูลไบโอเมตริกแบบรวม
ใน Android 9 ระบบจะให้กล่องโต้ตอบการตรวจสอบสิทธิ์ด้วยข้อมูลไบโอเมตริกแทน ของแอปของคุณ ฟังก์ชันการทำงานนี้จะสร้างรูปลักษณ์และตำแหน่งโฆษณาที่เป็นมาตรฐาน สำหรับกล่องโต้ตอบ ทำให้ผู้ใช้มั่นใจมากขึ้นว่ากำลังตรวจสอบสิทธิ์กับ เครื่องมือตรวจสอบเอกสารรับรองไบโอเมตริกที่เชื่อถือได้
หากแอปใช้ FingerprintManager
เพื่อแสดงกล่องโต้ตอบการตรวจสอบสิทธิ์ด้วยลายนิ้วมือต่อผู้ใช้ ให้เปลี่ยนไปใช้ BiometricPrompt
แทน BiometricPrompt
อาศัยระบบในการแสดงกล่องโต้ตอบการตรวจสอบสิทธิ์ และยังเปลี่ยนลักษณะการทำงานเพื่อปรับให้เข้ากับประเภทข้อมูลไบโอเมตริก
ที่ผู้ใช้ได้เลือกไว้
โมดูลความปลอดภัยของฮาร์ดแวร์
อุปกรณ์ที่รองรับซึ่งติดตั้ง Android 9 ขึ้นไปจะมี StrongBox Keymaster ซึ่งเป็นการใช้งาน Keymaster HAL ที่อยู่ในโมดูลความปลอดภัยของฮาร์ดแวร์ โมดูลมีองค์ประกอบดังนี้
- CPU ของตัวเอง
- พื้นที่เก็บข้อมูลที่ปลอดภัย
- ตัวสร้างหมายเลขสุ่มตัวจริง
- กลไกเพิ่มเติมเพื่อป้องกันการดัดแปลงแพ็กเกจและการโหลดแอปจากแหล่งที่ไม่รู้จักโดยไม่ได้รับอนุญาต
เมื่อตรวจสอบคีย์ที่จัดเก็บไว้ใน StrongBox Keymaster ระบบจะยืนยันความสมบูรณ์ของคีย์ด้วย Trusted Execution Environment (TEE)
ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ Strongbox Keymaster ได้ที่ข้อบังคับด้านความปลอดภัยของฮาร์ดแวร์
นำเข้าคีย์อย่างปลอดภัยไปยังคีย์สโตร์
Android 9 มีการรักษาความปลอดภัยการถอดรหัสคีย์เพิ่มเติมโดยการเพิ่ม ความสามารถในการนำเข้าคีย์ที่เข้ารหัสอย่างปลอดภัยไปยัง Keystore โดยใช้ รูปแบบคีย์ที่เข้ารหัส ASN.1 จากนั้น Keymaster จะถอดรหัสคีย์ใน Keystore เพื่อให้เนื้อหาของคีย์ไม่ปรากฏเป็นข้อความธรรมดาในหน่วยความจำโฮสต์ของอุปกรณ์
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีนําเข้าคีย์ที่เข้ารหัสอย่างปลอดภัยยิ่งขึ้น
รูปแบบลายเซ็น APK ที่มีการหมุนเวียนคีย์
Android 9 เพิ่มการรองรับ APK Signature Scheme v3 รูปแบบนี้มีตัวเลือก ใส่บันทึกหลักฐานแสดงการหมุนเวียนคีย์ในช่องลงชื่อสำหรับการลงชื่อแต่ละครั้ง ใบรับรอง ความสามารถนี้ช่วยให้แอปได้รับการรับรองด้วยใบรับรองการรับรองใหม่ได้โดยการลิงก์ใบรับรองการรับรองที่ผ่านมาของไฟล์ APK กับใบรับรองที่ใช้รับรองแอปในตอนนี้
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีหมุนเวียนคีย์โดยใช้ apksigner
ตัวเลือกในการอนุญาตให้ถอดรหัสคีย์ในอุปกรณ์ที่ปลดล็อกเท่านั้น
Android 9 เปิดตัว Flag unlockedDeviceRequired
ตัวเลือกนี้จะกำหนดว่าเก็บคีย์จะต้องมีการปลดล็อกหน้าจอก่อนอนุญาตให้ถอดรหัสข้อมูลที่อยู่ระหว่างการรับส่งหรือจัดเก็บโดยใช้คีย์ที่ระบุหรือไม่ คีย์ประเภทเหล่านี้เหมาะสําหรับการเข้ารหัสข้อมูลที่ละเอียดอ่อนเพื่อจัดเก็บไว้ในดิสก์ เช่น ข้อมูลสุขภาพหรือข้อมูลองค์กร การตั้งค่าสถานะนี้ช่วยให้ผู้ใช้มั่นใจมากขึ้นว่าข้อมูลจะไม่สามารถถอดรหัสได้ขณะที่อุปกรณ์ล็อกอยู่ในกรณีที่โทรศัพท์สูญหายหรือถูกขโมย
หากต้องการเก็บคีย์ให้ปลอดภัยจากการถอดรหัสขณะที่อุปกรณ์ล็อกอยู่ ให้เปิดใช้ Flag โดยส่ง true
ไปยังเมธอด setUnlockedDeviceRequired()
หลังจากทำตามขั้นตอนนี้เสร็จแล้ว เมื่อหน้าจอของผู้ใช้ล็อกอยู่ การพยายามถอดรหัสหรือเซ็นข้อมูลโดยใช้คีย์นี้จะดำเนินการไม่สำเร็จ อุปกรณ์ที่ล็อกอยู่ต้องมี
PIN, รหัสผ่าน, ลายนิ้วมือ หรือปัจจัยอื่นที่เชื่อถือได้ก่อน
เข้าถึงแล้ว
การรองรับการเข้ารหัสแบบเดิม
อุปกรณ์ Android 9 ที่มาพร้อมกับ Keymaster 4 รองรับอัลกอริทึมการเข้ารหัส Triple Data หรือ Triple DES หากแอปของคุณทำงานร่วมกับระบบเดิมที่ต้องใช้ Triple DES ให้ใช้การเข้ารหัสประเภทนี้เมื่อเข้ารหัสข้อมูลเข้าสู่ระบบที่มีความละเอียดอ่อน
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีทำให้แอปปลอดภัยยิ่งขึ้นได้ที่ความปลอดภัยสำหรับนักพัฒนาแอป Android
การเลิกใช้งาน WPS
เราเลิกใช้งานการตั้งค่าการป้องกัน Wi-Fi (WPS) เนื่องด้วยเหตุผลด้านความปลอดภัย
การสำรองข้อมูล Android
Android 9 เพิ่มฟังก์ชันการทำงานและตัวเลือกใหม่ๆ สำหรับนักพัฒนาแอปที่เกี่ยวข้องกับการสำรองและคืนค่า รายละเอียดเกี่ยวกับการเปลี่ยนแปลงเหล่านี้จะปรากฏใน
การสำรองข้อมูลการเข้ารหัสฝั่งไคลเอ็นต์
Android 9 เพิ่มการรองรับการเข้ารหัสข้อมูลสำรองของ Android ด้วยรหัสลับฝั่งไคลเอ็นต์ ระบบจะเปิดใช้การสนับสนุนนี้โดยอัตโนมัติเมื่อเป็นไปตามเงื่อนไขต่อไปนี้
- ผู้ใช้ได้ เปิดใช้ สำรองข้อมูลโดยใช้ Android 9 หรือสูงกว่า
- ผู้ใช้ ตั้งค่าหน้าจอ การล็อกอุปกรณ์ของบุตรหลาน ที่ต้องมี PIN, รูปแบบ หรือรหัสผ่านเพื่อปลดล็อก
เมื่อเปิดใช้มาตรการความเป็นส่วนตัวนี้ PIN, รูปแบบ หรือรหัสผ่านของอุปกรณ์ ที่จำเป็นต่อการกู้คืนข้อมูลจากข้อมูลสำรองที่อุปกรณ์ของผู้ใช้สร้างขึ้น ดูข้อมูลเพิ่มเติมเกี่ยวกับเทคโนโลยีที่อยู่เบื้องหลังฟีเจอร์นี้ได้ในเอกสารประกอบของบริการ Google Cloud Key Vault
กำหนดเงื่อนไขของอุปกรณ์ที่จําเป็นสําหรับการสํารองข้อมูล
หากแอปมีข้อมูลที่ละเอียดอ่อนหรือค่ากำหนด Android 9 ทำให้คุณสามารถกำหนดอุปกรณ์ ที่อยู่ภายใต้ ข้อมูลของแอปจะรวมอยู่ในข้อมูลสำรองของผู้ใช้ เช่น เมื่อฝั่งไคลเอ็นต์ เปิดใช้การเข้ารหัสหรือมีการโอนข้อมูลระหว่างอุปกรณ์ไปยังอุปกรณ์
ดูข้อมูลเพิ่มเติมเกี่ยวกับการสำรองข้อมูลในอุปกรณ์ Android ได้ที่ภาพรวมการสำรองข้อมูล
การช่วยเหลือพิเศษ
Android 9 เพิ่มการปรับปรุงการช่วยเหลือพิเศษ ที่ทำให้คุณสามารถนำเสนอประสบการณ์ที่ดียิ่งขึ้นแก่ผู้ใช้ของ แอปของคุณ
ความหมายของการนำทาง
แอตทริบิวต์ที่เพิ่มใน Android 9 ทำให้คุณระบุวิธี บริการการช่วยเหลือพิเศษ โดยเฉพาะโปรแกรมอ่านหน้าจอ จะไปยังส่วนต่างๆ ของ ไปยังอีกหน้าจอหนึ่ง แอตทริบิวต์เหล่านี้สามารถช่วยผู้ใช้ที่มีความบกพร่องทางสายตาได้ ย้ายตำแหน่งข้อความใน UI ของแอปอย่างรวดเร็ว และให้ผู้ใช้ทำการเลือก
เช่น ในแอปช็อปปิ้ง โปรแกรมอ่านหน้าจอสามารถช่วยผู้ใช้ไปยังส่วนต่างๆ ได้โดยตรงจากดีลหมวดหมู่หนึ่งไปยังอีกหมวดหมู่หนึ่ง โดยที่โปรแกรมอ่านหน้าจอไม่ต้องอ่านรายการทั้งหมดในหมวดหมู่ก่อนไปยังหมวดหมู่ถัดไป
ชื่อแผงการช่วยเหลือพิเศษ
ใน Android 8.1 (API ระดับ 27) และต่ำกว่า บริการการช่วยเหลือพิเศษอาจทำไม่ได้เสมอไป ระบุเมื่อมีการอัปเดตบานหน้าต่างที่เจาะจงของหน้าจอ เช่น เมื่อกิจกรรมแทนที่ Fragment หนึ่งด้วยอีก Fragment อื่น บานหน้าต่างประกอบด้วย องค์ประกอบ UI ที่มีลักษณะเกี่ยวข้องและมีการจัดกลุ่มอย่างสมเหตุสมผล ซึ่งโดยปกติแล้วจะประกอบด้วย ส่วนย่อย
ใน Android 9 คุณสามารถระบุชื่อแผงการช่วยเหลือพิเศษหรือชื่อที่ระบุได้สำหรับแต่ละแผง หากแผงมีชื่อแผงการช่วยเหลือพิเศษ บริการการช่วยเหลือพิเศษจะได้รับข้อมูลที่ละเอียดยิ่งขึ้นเมื่อแผงมีการเปลี่ยนแปลง ความสามารถนี้ช่วยให้บริการต่างๆ ให้ข้อมูลที่ละเอียดมากขึ้นแก่ผู้ใช้ได้ เกี่ยวกับสิ่งที่เปลี่ยนแปลงไปใน UI
หากต้องการระบุชื่อของแผง ให้ใช้แอตทริบิวต์ android:accessibilityPaneTitle
นอกจากนี้ คุณยังอัปเดตชื่อของแผง UI ที่แทนที่ในรันไทม์ได้โดยใช้ setAccessibilityPaneTitle()
เช่น คุณอาจตั้งชื่อพื้นที่เนื้อหาของ
Fragment
การนำทางตามส่วนหัว
หากแอปของคุณแสดงเนื้อหาแบบข้อความที่มีส่วนหัวเชิงตรรกะ ให้ตั้งค่า
android:accessibilityHeading
แอตทริบิวต์เป็น true
สำหรับอินสแตนซ์ของ
View
ที่แสดงถึงส่วนหัวเหล่านั้น โดย
การเพิ่มหัวข้อเหล่านี้แสดงว่าคุณอนุญาตให้บริการการช่วยเหลือพิเศษช่วยผู้ใช้ไปยังส่วนต่างๆ
จากหัวข้อหนึ่งไปยังหัวข้อถัดไปโดยตรง บริการช่วยเหลือพิเศษต่างๆ สามารถใช้ข้อมูลนี้
ความสามารถของผู้ใช้ ประสบการณ์การนำทางใน UI
การนำทางและเอาต์พุตของกลุ่ม
โปรแกรมอ่านหน้าจอมักใช้
android:focusable
ระบุแหล่งที่มาให้กับ
กำหนดว่าควรอ่าน
ViewGroup
หรือคอลเล็กชันของ
View
ออบเจ็กต์ เป็นหน่วยเดียว วิธีนี้จะช่วยให้ผู้ใช้เข้าใจว่ายอดดูมีความเกี่ยวข้องกันตามตรรกะ
ใน Android 8.1 และต่ำกว่า คุณต้องทำเครื่องหมายออบเจ็กต์ View
แต่ละรายการภายใน
ViewGroup
เป็นแบบโฟกัสไม่ได้ และ ViewGroup
เองก็โฟกัสได้ การจัดเรียงนี้ทําให้ระบบทําเครื่องหมาย View
บางอินสแตนซ์ให้โฟกัสได้ ซึ่งทําให้การนำทางด้วยแป้นพิมพ์ยุ่งยากขึ้น
ตั้งแต่ Android 9 เป็นต้นไป คุณจะใช้แอตทริบิวต์ android:screenReaderFocusable
แทนแอตทริบิวต์ android:focusable
ได้ในกรณีที่การทำให้ออบเจ็กต์ View
โฟกัสได้ทำให้เกิดผลลัพธ์ที่ไม่พึงประสงค์ โปรแกรมอ่านหน้าจอจะวางโฟกัสไว้ที่องค์ประกอบทั้งหมดที่ตั้งค่า android:screenReaderFocusable
หรือ android:focusable
เป็น true
การดำเนินการตามสะดวก
Android 9 เพิ่มการรองรับการดำเนินการที่สะดวกในนามของผู้ใช้ ดังนี้
- การโต้ตอบกับเคล็ดลับเครื่องมือ
- ฟีเจอร์ที่เพิ่มเข้ามาในเฟรมเวิร์กการช่วยเหลือพิเศษช่วยให้คุณเข้าถึง
เคล็ดลับเครื่องมือใน UI ของแอป ใช้
getTooltipText()
เพื่ออ่านข้อความของเคล็ดลับเครื่องมือ และใช้ACTION_SHOW_TOOLTIP
และACTION_HIDE_TOOLTIP
เพื่อสั่งให้View
แสดงหรือ ซ่อนเคล็ดลับเครื่องมือ - การดำเนินการส่วนกลางที่เพิ่มแล้ว
- Android 9 เพิ่มการรองรับการดำเนินการเพิ่มเติม 2 อย่างของอุปกรณ์ใน
AccessibilityService
บริการของคุณช่วยให้ผู้ใช้ล็อกอุปกรณ์และถ่ายภาพหน้าจอได้โดยใช้การดำเนินการGLOBAL_ACTION_LOCK_SCREEN
และGLOBAL_ACTION_TAKE_SCREENSHOT
ตามลำดับ
รายละเอียดการเปลี่ยนแปลงหน้าต่าง
Android 9 ช่วยให้คุณติดตามการอัปเดตหน้าต่างของแอปได้ง่ายขึ้นเมื่อแอปวาดหน้าต่างหลายรายการพร้อมกัน เมื่อ
TYPE_WINDOWS_CHANGED
เกิดเหตุการณ์ ให้ใช้
getWindowChanges()
API เพื่อพิจารณาว่าหน้าต่างเปลี่ยนแปลงไปอย่างไร ในระหว่างการอัปเดตหลายหน้าต่าง
จะสร้างชุดเหตุการณ์ของตัวเอง
getSource()
จะแสดงมุมมองรูทของหน้าต่างที่เชื่อมโยงกับแต่ละเหตุการณ์
หากแอปกำหนดชื่อแผงการช่วยเหลือพิเศษสำหรับออบเจ็กต์ View
ไว้ บริการจะจดจำได้เมื่อ UI ของแอปได้รับการอัปเดต เมื่อ
TYPE_WINDOW_STATE_CHANGED
เกิดเหตุการณ์ ให้ใช้ประเภทที่แสดงผลตาม
getContentChangeTypes()
เพื่อดูว่าหน้าต่างเปลี่ยนแปลงไปอย่างไร เช่น เฟรมเวิร์กสามารถตรวจจับได้เมื่อแผงมีชื่อใหม่หรือเมื่อแผงหายไป
การหมุน
เราได้เพิ่มโหมดที่ตรึง การวางแนวแม้ว่าตำแหน่งของอุปกรณ์จะเปลี่ยนไปก็ตาม ผู้ใช้สามารถเรียกใช้การหมุนด้วยตนเองได้เมื่อจำเป็นโดยกดปุ่มในแถบระบบ
ในกรณีส่วนใหญ่ ผลกระทบต่อความเข้ากันได้ของแอปจะน้อยมาก อย่างไรก็ตาม หากแอปของคุณมีลักษณะการหมุนที่กำหนดเองหรือใช้การตั้งค่าการวางแนวหน้าจอที่ผิดปกติ คุณอาจพบปัญหาที่อาจไม่สังเกตเห็นก่อนหน้านี้เมื่อการตั้งค่าการหมุนของผู้ใช้เป็นแนวตั้งเสมอ เราขอแนะนำให้คุณศึกษา ให้ดูลักษณะการหมุนเวียนในกิจกรรมหลักทั้งหมดของแอปและ ตรวจดูว่าการตั้งค่าการวางแนวหน้าจอทั้งหมดของคุณยังคง ประสบการณ์ที่ดีที่สุด
โปรดดูรายละเอียดเพิ่มเติมที่หัวข้อลักษณะการทำงานที่เกี่ยวข้อง การเปลี่ยนแปลง

โหมดการหมุนใหม่ช่วยให้ผู้ใช้เรียกใช้การหมุนด้วยตนเองเมื่อจำเป็นโดยใช้ปุ่มในแถบระบบ
ข้อความ
Android 9 เพิ่มฟีเจอร์ต่อไปนี้ที่เกี่ยวข้องกับข้อความลงในแพลตฟอร์ม
ข้อความที่คำนวณไว้ล่วงหน้า: ชั้นเรียน
PrecomputedText
ปรับปรุง ประสิทธิภาพการแสดงผลข้อความโดยทำให้คุณสามารถคำนวณและแคช ข้อมูลล่วงหน้า และยังช่วยให้แอปปิดเลย์เอาต์ข้อความได้ด้วย เทรดหลักแว่นขยาย: คลาส
Magnifier
คือ วิดเจ็ตแพลตฟอร์มที่ให้ API แว่นขยาย ช่วยให้มีความสอดคล้องกัน ฟีเจอร์แว่นขยายในทุกแอปSmart Linkify: Android 9 ช่วยปรับปรุง
TextClassifier
ชั้นเรียน ซึ่งใช้ประโยชน์จากแมชชีนเลิร์นนิงในการระบุเอนทิตีบางส่วนในข้อความที่เลือกและ แนะนำการดำเนินการ ตัวอย่างเช่นTextClassifier
ช่วยให้แอปตรวจจับได้ผู้ใช้เลือกหมายเลขโทรศัพท์ จากนั้น แอปของคุณสามารถแนะนำว่า ผู้ใช้โทรออกโดยใช้หมายเลขนั้น ฟีเจอร์ในTextClassifier
จะแทนที่ฟังก์ชันการทำงานของคลาสLinkify
เลย์เอาต์ข้อความ: มีวิธีการและแอตทริบิวต์ต่างๆ มากมายที่ช่วยให้ ออกแบบ UI ของคุณ โปรดดูรายละเอียดใน เอกสารอ้างอิง สำหรับ
TextView
การแปลงไฟล์ DEX ของ ART ก่อนเวลา
รันไทม์ของ Android ในอุปกรณ์ที่ใช้ Android 9 ขึ้นไป (ART) คอมไพเลอร์ล่วงหน้าช่วยเพิ่มประสิทธิภาพให้ Dalvik Executable ที่บีบอัด (DEX) ได้โดยแปลงไฟล์ DEX ในแพ็กเกจแอปให้เป็น ที่กระชับได้ใจความ การเปลี่ยนแปลงนี้จะช่วยให้แอปเริ่มทำงานเร็วขึ้นและใช้งานได้เร็วยิ่งขึ้น และ RAM ก็น้อยลงด้วย
การปรับปรุงนี้จะเป็นประโยชน์อย่างยิ่งสำหรับอุปกรณ์ระดับโลว์เอนด์ที่มี I/O ดิสก์ที่ช้า เร็ว
การติดตามระบบในอุปกรณ์
Android 9 ให้คุณบันทึกการติดตามของระบบจากอุปกรณ์ของคุณ จากนั้นแชร์รายงานเกี่ยวกับไฟล์บันทึกเหล่านี้กับทีมพัฒนาของคุณ รายงานนี้ รองรับหลายรูปแบบ รวมทั้ง HTML ด้วย
การเก็บรวบรวมร่องรอยเหล่านี้จะช่วยให้คุณบันทึกข้อมูลการกําหนดเวลาที่เกี่ยวข้องกับกระบวนการและเธรดของแอป รวมถึงดูสถานะอุปกรณ์ประเภทอื่นๆ ที่มีนัยสําคัญทั่วโลกได้
ดูข้อมูลเพิ่มเติมเกี่ยวกับเครื่องมือนี้ได้ที่ใช้งานระบบในอุปกรณ์ การติดตาม