ฟีเจอร์และ API ของ Android 9

Android 9 (ระดับ API 28) เปิดตัวฟีเจอร์และความสามารถใหม่ๆ ที่ยอดเยี่ยมสำหรับ ผู้ใช้และนักพัฒนาแอป เอกสารนี้จะเน้นย้ำถึงฟีเจอร์ใหม่ๆ สำหรับนักพัฒนาแอป

ดูข้อมูลเกี่ยวกับ API ใหม่ได้ในรายงานความแตกต่างของ API หรือไปที่เอกสารอ้างอิง Android API นอกจากนี้ อย่าลืมดูการเปลี่ยนแปลงลักษณะการทำงานใน Android 9 เพื่อดูข้อมูล เกี่ยวกับส่วนที่การเปลี่ยนแปลงแพลตฟอร์มอาจส่งผลต่อแอปของคุณ

การกำหนดตำแหน่งในอาคารด้วย Wi-Fi RTT

API RTT ใหม่รองรับการกำหนดตำแหน่งในอาคารในแอป

Android 9 เพิ่มการรองรับแพลตฟอร์มสำหรับโปรโตคอล Wi-Fi IEEE 802.11-2016 หรือที่เรียกว่า Wi-Fi Round-Trip-Time (RTT) เพื่อให้คุณใช้ประโยชน์ จากการกำหนดตำแหน่งในอาคารในแอปได้

ในอุปกรณ์ที่ใช้ Android 9 ที่รองรับฮาร์ดแวร์ แอปจะใช้ RTT API เพื่อวัด ระยะทางไปยังจุดเข้าถึง (AP) Wi-Fi ที่รองรับ RTT ซึ่งอยู่ใกล้เคียงได้ อุปกรณ์ต้องเปิดใช้บริการตำแหน่งและเปิดการสแกนหา Wi-Fi (ในส่วนการตั้งค่า > ตำแหน่ง) และแอปของคุณต้องมีสิทธิ์ ACCESS_FINE_LOCATION อุปกรณ์ไม่จำเป็นต้องเชื่อมต่อกับจุดเข้าถึงเพื่อใช้ RTT เพื่อรักษาความเป็นส่วนตัว มีเพียงโทรศัพท์เท่านั้นที่สามารถกำหนดระยะห่างจาก จุดเข้าใช้งานได้ ส่วนจุดเข้าใช้งานจะไม่มีข้อมูลนี้

หากอุปกรณ์วัดระยะทางไปยังจุดเข้าใช้งาน 3 จุดขึ้นไป คุณจะใช้อัลกอริทึม การหาตำแหน่งจากจุดหลายจุดเพื่อประมาณตำแหน่งอุปกรณ์ที่เหมาะสมที่สุดกับ การวัดเหล่านั้นได้ โดยปกติแล้วผลลัพธ์จะมีความแม่นยำภายใน 1-2 เมตร

ความแม่นยำนี้ช่วยให้คุณสร้างประสบการณ์ใหม่ๆ ได้ เช่น การนำทางในอาคาร และบริการที่อิงตามตำแหน่งแบบละเอียด เช่น การควบคุมด้วยเสียงที่แยกความแตกต่างได้ (เช่น "เปิดไฟดวงนี้") และข้อมูลตามตำแหน่ง (เช่น "ผลิตภัณฑ์นี้มีข้อเสนอพิเศษไหม")

ดูการใช้งาน WiFi RTT API ได้ในแอปเดโม Android WifiRttScan

ดูข้อมูลเพิ่มเติมได้ที่ ตำแหน่ง Wi-Fi: การวัดระยะด้วย RTT

การรองรับหน้าจอรอยบาก

หน้าจอตัวเลือกสำหรับนักพัฒนาแอปที่แสดงขนาดรอยบากต่างๆ

การทดสอบหน้าจอรอยบากโดยใช้โปรแกรมจำลอง

Android 9 รองรับหน้าจอขอบจรดขอบรุ่นล่าสุด ที่มีรอยบากสำหรับกล้องและลำโพง คลาส DisplayCutout ช่วยให้คุณทราบตําแหน่งและรูปร่างของพื้นที่ที่ใช้งานไม่ได้ซึ่งไม่ควรแสดงเนื้อหา หากต้องการพิจารณาว่ามีพื้นที่คัตเอาต์เหล่านี้หรือไม่และอยู่ที่ใด ให้ใช้วิธีgetDisplayCutout()

แอตทริบิวต์เลย์เอาต์หน้าต่างใหม่ layoutInDisplayCutoutMode ช่วยให้แอปจัดวางเนื้อหาโดยรอบรอยบากของอุปกรณ์ได้ คุณตั้งค่าแอตทริบิวต์นี้เป็นค่าใดค่าหนึ่งต่อไปนี้ได้

คุณจำลองรอยบากบนหน้าจอในอุปกรณ์หรือโปรแกรมจำลองที่ใช้ Android 9 ได้โดยทำดังนี้

  1. เปิดใช้ตัวเลือกสำหรับนักพัฒนาแอป
  2. ในหน้าจอตัวเลือกสำหรับนักพัฒนาแอป ให้เลื่อนลงไปที่ส่วนการวาด แล้วเลือกจำลองการแสดงผลที่มีรอยบาก
  3. เลือกขนาดของภาพที่ตัดออก

การแจ้งเตือน

Android 9 ได้ปรับปรุงการแจ้งเตือนหลายอย่าง ซึ่งทั้งหมดนี้พร้อมให้บริการแก่นักพัฒนาแอปที่กำหนดเป้าหมายเป็น API ระดับ 28 ขึ้นไป

การแจ้งเตือนการรับส่งข้อความ

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

การแจ้งเตือนการรับส่งข้อความ

MessagingStyle ที่มีการตอบกลับและการสนทนา

ดูโค้ดตัวอย่างที่ใช้การแจ้งเตือน รวมถึงฟีเจอร์ของ Android 9 ได้ในตัวอย่าง People

ประสบการณ์การรับส่งข้อความที่ดียิ่งขึ้น

ตั้งแต่ Android 7.0 (ระดับ API 24) คุณสามารถเพิ่มการดำเนินการเพื่อตอบกลับข้อความหรือป้อนข้อความอื่นๆ ได้โดยตรงจากการแจ้งเตือน Android 9 ได้ปรับปรุงฟีเจอร์นี้ด้วยการเพิ่มประสิทธิภาพต่อไปนี้

  • การรองรับผู้เข้าร่วมการสนทนาที่ง่ายขึ้น: คลาส Person ใช้เพื่อระบุผู้ที่เกี่ยวข้องในการสนทนา รวมถึง อวตารและ URI ของบุคคลเหล่านั้น API อื่นๆ อีกมากมาย เช่น addMessage() ตอนนี้ใช้คลาส Person แทน CharSequence แล้ว Person คลาส ยังรองรับรูปแบบการออกแบบ Builder ด้วย

  • การรองรับรูปภาพ: ตอนนี้ 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() เพื่อระบุการสนทนาว่าเป็นการสนทนากลุ่มหรือไม่

  • ตั้งค่าการดำเนินการเชิงความหมายสำหรับ Intent: เมธอด setSemanticAction() ช่วยให้คุณกำหนดความหมายเชิงความหมายให้กับการดำเนินการได้ เช่น "ทำเครื่องหมายว่าอ่านแล้ว" "ลบ" "ตอบกลับ" และอื่นๆ

  • การตอบกลับอัจฉริยะ: Android 9 รองรับการตอบกลับที่แนะนำแบบเดียวกันกับที่มีในแอปรับส่งข้อความ ใช้ RemoteInput.setChoices() เพื่อระบุอาร์เรย์ของการตอบกลับมาตรฐานแก่ผู้ใช้

การตั้งค่าช่อง การออกอากาศ และโหมดห้ามรบกวน

Android 8.0 ได้เปิดตัวช่องทางการแจ้งเตือน ซึ่งช่วยให้คุณสร้างช่องที่ผู้ใช้ปรับแต่งได้สำหรับประเภทการแจ้งเตือนแต่ละประเภทที่ต้องการแสดง Android 9 ทำให้การตั้งค่าช่องทางการแจ้งเตือนง่ายขึ้นด้วยการเปลี่ยนแปลงต่อไปนี้

  • การบล็อก Channel Group: ตอนนี้ผู้ใช้สามารถบล็อกกลุ่มช่องทั้งหมด ในการตั้งค่าการแจ้งเตือนของแอปได้แล้ว คุณสามารถใช้เมธอด isBlocked() เพื่อระบุเมื่อมีการบล็อกกลุ่ม และด้วยเหตุนี้ ระบบจะไม่ส่ง การแจ้งเตือนสำหรับช่องในกลุ่มนั้น

    นอกจากนี้ แอปยังค้นหาการตั้งค่า Channel Group ปัจจุบันได้โดยใช้เมธอดgetNotificationChannelGroup() ใหม่

  • ประเภท Intent การออกอากาศใหม่: ตอนนี้ระบบ Android จะส่ง Intent การออกอากาศ เมื่อมีการเปลี่ยนแปลงสถานะการบล็อกของแชแนลการแจ้งเตือนและกลุ่มแชแนล แอปที่เป็นเจ้าของช่องหรือกลุ่มที่ถูกบล็อกจะสามารถฟัง 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 ตัวขึ้นไปโดยอัตโนมัติได้ด้วย

การปรับปรุงอื่นๆ ในกล้อง ได้แก่ พารามิเตอร์ เซสชัน เพิ่มเติมที่ช่วยลดความล่าช้าระหว่างการจับภาพครั้งแรก และการแชร์พื้นผิวที่ช่วยให้ ไคลเอ็นต์กล้องจัดการ Use Case ต่างๆ ได้โดยไม่ต้องหยุดและเริ่ม การสตรีมกล้อง นอกจากนี้ เรายังเพิ่ม API สำหรับการรองรับ แฟลช ที่อิงตามจอแสดงผล และสิทธิ์เข้าถึงการประทับเวลา OIS สำหรับการป้องกันภาพสั่นไหวและเอฟเฟกต์พิเศษระดับแอป

ใน Android 9 API แบบหลายกล้อง รองรับกล้องขาวดำสำหรับอุปกรณ์ที่มี FULL หรือ LIMITED เอาต์พุตขาวดำจะแสดงผ่านรูปแบบ YUV_420_888 โดยมี Y เป็นระดับสีเทา, U (Cb) เป็น 128 และ V (Cr) เป็น 128

Android 9 ยังรองรับกล้อง USB/UVC ภายนอกในอุปกรณ์ที่รองรับด้วย

ImageDecoder สำหรับ Drawable และบิตแมป

Android 9 เปิดตัวคลาส ImageDecoder ซึ่งเป็นแนวทางที่ทันสมัยในการถอดรหัสรูปภาพ ใช้คลาสนี้ แทน API BitmapFactory และ BitmapFactory.Options

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() เพื่อแก้ไขลักษณะที่ปรากฏของรูปภาพ เช่น การใช้มาสก์วงกลมหรือ มุมโค้ง

วิดีโอ VP9 แบบ HDR, การบีบอัดรูปภาพ HEIF และ Media API

Android 9 มีการรองรับ High Dynamic Range (HDR) VP9 Profile 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 กับมิกซ์ย่อยที่มีเอฟเฟกต์ได้ด้วย ใช้ API AudioEffect เพื่อควบคุมเอฟเฟกต์

Android 9 เปิดตัว API AudioEffect สำหรับการประมวลผลไดนามิก คลาสนี้ช่วยให้คุณสร้างเอฟเฟกต์เสียงตามช่องได้ ซึ่งรวมถึง การปรับสมดุล การบีบอัดแบบหลายแถบ และลิมิตเตอร์ ในหลายๆ ขั้นตอน คุณกำหนดค่าจำนวนวงดนตรีและเวทีที่ใช้งานได้ และควบคุมพารามิเตอร์ส่วนใหญ่ได้แบบเรียลไทม์

ความไวต่อค่าอินเทอร์เน็ตใน JobScheduler

ตั้งแต่ Android 9 เป็นต้นไป JobScheduler สามารถใช้สัญญาณสถานะเครือข่ายที่ผู้ให้บริการระบุเพื่อปรับปรุงการจัดการ งานที่เกี่ยวข้องกับเครือข่าย

งานสามารถประกาศขนาดข้อมูลโดยประมาณ ดึงข้อมูลล่วงหน้าของสัญญาณ และระบุ ข้อกำหนดของเครือข่ายโดยละเอียด JobScheduler จากนั้นจะจัดการงานตาม สถานะเครือข่าย เช่น เมื่อเครือข่ายส่งสัญญาณว่ามีการรับส่งข้อมูลหนาแน่น JobScheduler อาจเลื่อนคำขอจากเครือข่ายขนาดใหญ่ เมื่ออยู่ในเครือข่ายที่ไม่มีการวัดปริมาณการใช้งาน JobScheduler จะเรียกใช้ งานการดึงข้อมูลล่วงหน้าเพื่อปรับปรุงประสบการณ์ของผู้ใช้ เช่น การดึงข้อมูลพาดหัวล่วงหน้า

เมื่อเพิ่มงาน โปรดใช้ setEstimatedNetworkBytes() setPrefetch() และ setRequiredNetwork() เมื่อเหมาะสมเพื่อช่วยให้ JobScheduler จัดการงานได้อย่างถูกต้อง เมื่อเรียกใช้งานงานของคุณ โปรดใช้ออบเจ็กต์ Network ที่ส่งคืนโดย JobParameters.getNetwork() มิเช่นนั้น คุณจะใช้เครือข่ายเริ่มต้นของอุปกรณ์โดยปริยาย ซึ่งอาจไม่ตรงตามข้อกำหนดของคุณ ทำให้มีการใช้ปริมาณการใช้อินเทอร์เน็ตโดยไม่ตั้งใจ

Neural Networks API 1.1

Neural Networks API เปิดตัวใน Android 8.1 (ระดับ API 27) เพื่อเร่งแมชชีนเลิร์นนิงในอุปกรณ์บน Android Android 9 ขยายและปรับปรุง API โดยเพิ่มการรองรับการดำเนินการใหม่ 9 รายการ ดังนี้

ปัญหาที่ทราบ: เมื่อส่ง ANEURALNETWORKS_TENSOR_QUANT8_ASYMM เทนเซอร์ไปยัง 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 Protected Confirmation ได้ เมื่อใช้เวิร์กโฟลว์นี้ แอปจะแสดงข้อความแจ้งแก่ผู้ใช้เพื่อขอให้ผู้ใช้อนุมัติข้อความสั้นๆ คำสั่งนี้ช่วยให้แอปยืนยันได้ว่าผู้ใช้ต้องการทำธุรกรรมที่มีความละเอียดอ่อนให้เสร็จสมบูรณ์ เช่น การชำระเงิน

หากผู้ใช้ยอมรับคำชี้แจง Android Keystore จะรับและจัดเก็บ ลายเซ็นการเข้ารหัสที่ได้รับการปกป้องโดยการตรวจสอบสิทธิ์ข้อความแบบแฮชที่มีคีย์ (HMAC) หลังจากที่ Android Keystore ยืนยันความถูกต้องของข้อความแล้ว แอปของคุณ จะใช้คีย์ที่สร้างจาก trustedConfirmationRequired ในสภาพแวดล้อมการดำเนินการที่เชื่อถือได้ (TEE) เพื่อลงนามในข้อความที่ผู้ใช้ยอมรับได้ ลายเซ็นระบุด้วยความมั่นใจสูงว่าผู้ใช้ได้เห็น ข้อความและยอมรับข้อความดังกล่าว

ข้อควรระวัง: Android Protected Confirmation ไม่ได้ให้ ช่องทางข้อมูลที่ปลอดภัยสำหรับผู้ใช้ แอปของคุณไม่สามารถถือว่ามีการรับประกันการรักษาความลับใดๆ นอกเหนือจากที่แพลตฟอร์ม Android มีให้ โดยเฉพาะอย่างยิ่ง อย่าใช้เวิร์กโฟลว์นี้เพื่อแสดงข้อมูลที่ละเอียดอ่อนซึ่งคุณ จะไม่แสดงในอุปกรณ์ของผู้ใช้ตามปกติ

ดูคำแนะนำเกี่ยวกับการเพิ่มการรองรับ Android Protected Confirmation ได้ที่ คู่มือ Android Protected Confirmation

กล่องโต้ตอบการตรวจสอบสิทธิ์ด้วยข้อมูลไบโอเมตริกแบบรวม

ใน Android 9 ระบบจะแสดงกล่องโต้ตอบการตรวจสอบสิทธิ์ไบโอเมตริกในนามของแอปของคุณ ฟังก์ชันนี้จะสร้างรูปลักษณ์ ความรู้สึก และตำแหน่งที่ได้มาตรฐานสำหรับกล่องโต้ตอบ ซึ่งจะช่วยให้ผู้ใช้มั่นใจมากขึ้นว่าตนกำลังตรวจสอบสิทธิ์กับเครื่องมือตรวจสอบข้อมูลเข้าสู่ระบบไบโอเมตริกที่เชื่อถือได้

หากแอปของคุณใช้ FingerprintManager เพื่อแสดงกล่องโต้ตอบการตรวจสอบสิทธิ์ด้วยลายนิ้วมือต่อผู้ใช้ ให้เปลี่ยนไปใช้ BiometricPrompt แทน BiometricPrompt อาศัยระบบในการแสดงกล่องโต้ตอบการตรวจสอบสิทธิ์ นอกจากนี้ยังเปลี่ยนลักษณะการทำงานเพื่อปรับให้เข้ากับประเภทการตรวจสอบสิทธิ์ด้วยไบโอเมตริก ที่ผู้ใช้เลือกด้วย

โมดูลความปลอดภัยของฮาร์ดแวร์

อุปกรณ์ที่รองรับซึ่งใช้ Android 9 ขึ้นไปที่ติดตั้งไว้จะมี StrongBox KeyMint (เดิมคือ Keymaster) ซึ่งเป็นการติดตั้งใช้งาน KeyMint (เดิมคือ Keymaster) HAL ที่อยู่ในโมดูลความปลอดภัยของฮาร์ดแวร์ โมดูลประกอบด้วยข้อมูลต่อไปนี้

  • CPU ของตัวเอง
  • พื้นที่เก็บข้อมูลที่ปลอดภัย
  • ตัวสร้างหมายเลขแบบสุ่มที่แท้จริง
  • กลไกเพิ่มเติมเพื่อป้องกันการดัดแปลงแพ็กเกจและการโหลดแอปจากแหล่งที่ไม่รู้จักโดยไม่ได้รับอนุญาต

เมื่อตรวจสอบคีย์ที่จัดเก็บไว้ใน StrongBox KeyMint ระบบจะยืนยันความสมบูรณ์ของคีย์ด้วยสภาพแวดล้อมการดำเนินการที่เชื่อถือได้ (TEE)

ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ StrongBox KeyMint ได้ที่โมดูลความปลอดภัยของฮาร์ดแวร์

นำเข้าคีย์ไปยังคีย์สโตร์อย่างปลอดภัย

Android 9 เพิ่มความปลอดภัยในการถอดรหัสคีย์โดยเพิ่มความสามารถในการนำเข้าคีย์ที่เข้ารหัสอย่างปลอดภัยไปยังที่เก็บคีย์โดยใช้รูปแบบคีย์ที่เข้ารหัส ASN.1 จากนั้น KeyMint จะถอดรหัสคีย์ใน ที่เก็บคีย์ เพื่อให้เนื้อหาของคีย์ไม่ปรากฏเป็นข้อความธรรมดาในหน่วยความจำโฮสต์ของอุปกรณ์

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีนําเข้าคีย์ที่เข้ารหัสอย่างปลอดภัยยิ่งขึ้น

APK Signature Scheme ที่มีการหมุนเวียนคีย์

Android 9 เพิ่มการรองรับ APK Signature Scheme v3 โดยสคีมานี้มีตัวเลือก ในการรวมระเบียนหลักฐานแสดงการหมุนเวียนคีย์ไว้ในบล็อกการลงนามสำหรับใบรับรองการลงนามแต่ละรายการ ความสามารถนี้ช่วยให้แอปของคุณได้รับการลงนามด้วยใบรับรองการลงนามใหม่ โดยการลิงก์ใบรับรองการลงนามที่ผ่านมาของไฟล์ APK กับใบรับรองที่ใช้ลงนามในปัจจุบัน

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีหมุนเวียนคีย์โดยใช้ apksigner

ตัวเลือกในการอนุญาตให้ถอดรหัสคีย์ในอุปกรณ์ที่ปลดล็อกแล้วเท่านั้น

Android 9 เปิดตัวunlockedDeviceRequired ตัวเลือกนี้จะกำหนดว่า Keystore ต้องปลดล็อกหน้าจอก่อนจึงจะอนุญาตให้ ถอดรหัสข้อมูลที่กำลังรับส่งหรือจัดเก็บโดยใช้คีย์ที่ระบุหรือไม่ คีย์ประเภทนี้เหมาะสำหรับการเข้ารหัสข้อมูลที่ละเอียดอ่อนเพื่อจัดเก็บไว้ในดิสก์ เช่น ข้อมูลด้านสุขภาพหรือข้อมูลองค์กร Flag นี้ช่วยให้ผู้ใช้มั่นใจได้มากขึ้นว่าระบบจะถอดรหัสข้อมูลไม่ได้ในขณะที่อุปกรณ์ล็อกอยู่ หากโทรศัพท์สูญหายหรือถูกขโมย

หากต้องการเก็บคีย์ให้ปลอดภัยจากการถอดรหัสขณะที่อุปกรณ์ล็อกอยู่ ให้เปิดใช้ Flag โดยส่ง true ไปยังเมธอด setUnlockedDeviceRequired() หลังจากทำขั้นตอนนี้เสร็จแล้ว เมื่อหน้าจอของผู้ใช้ล็อกอยู่ ความพยายามใดๆ ในการถอดรหัสหรือลงนามในข้อมูลโดยใช้คีย์นี้จะล้มเหลว อุปกรณ์ที่ล็อกจะต้องใช้ PIN, รหัสผ่าน, ลายนิ้วมือ หรือปัจจัยที่เชื่อถือได้อื่นๆ ก่อนจึงจะ เข้าถึงได้

การรองรับการเข้ารหัสเวอร์ชันเดิม

อุปกรณ์ Android 9 ที่จัดส่งพร้อม Keymaster 4 รองรับอัลกอริทึมการเข้ารหัสข้อมูลแบบ 3 ชั้นหรือ Triple DES หากแอปของคุณทำงานร่วมกับระบบเดิมที่ต้องใช้ Triple DES ให้ใช้การเข้ารหัสประเภทนี้เมื่อเข้ารหัสข้อมูลเข้าสู่ระบบที่ละเอียดอ่อน

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีทำให้แอปปลอดภัยยิ่งขึ้นได้ที่ความปลอดภัยสำหรับนักพัฒนาแอป Android

การเลิกใช้งาน WPS

Wi-Fi Protected Setup (WPS) เลิกใช้งานแล้วด้วยเหตุผลด้านความปลอดภัย

การสำรองข้อมูล Android

Android 9 เพิ่มฟังก์ชันการทำงานใหม่และตัวเลือกสำหรับนักพัฒนาแอปที่เกี่ยวข้อง กับการสำรองและกู้คืน รายละเอียดเกี่ยวกับการเปลี่ยนแปลงเหล่านี้จะปรากฏในส่วนต่อไปนี้

ข้อมูลสำรองที่เข้ารหัสฝั่งไคลเอ็นต์

Android 9 เพิ่มการรองรับการเข้ารหัสข้อมูลสำรองของ Android ด้วย ข้อมูลลับฝั่งไคลเอ็นต์ ระบบจะเปิดใช้การรองรับนี้โดยอัตโนมัติเมื่อตรงตามเงื่อนไขต่อไปนี้

เมื่อเปิดใช้มาตรการด้านความเป็นส่วนตัวนี้ คุณจะต้องใช้ PIN, รูปแบบ หรือรหัสผ่านของอุปกรณ์ เพื่อกู้คืนข้อมูลจากการสำรองข้อมูลที่สร้างโดยอุปกรณ์ของผู้ใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับเทคโนโลยีที่อยู่เบื้องหลังฟีเจอร์นี้ได้ในสมุดปกขาวบริการที่เก็บคีย์ของ Google Cloud

กำหนดเงื่อนไขของอุปกรณ์ที่จำเป็นสำหรับการสำรองข้อมูล

หากข้อมูลแอปมีข้อมูลหรือค่ากําหนดที่ละเอียดอ่อน Android 9 จะช่วยให้คุณกําหนดเงื่อนไขของอุปกรณ์ที่ข้อมูลของแอปจะรวมอยู่ในการสํารองข้อมูลของผู้ใช้ได้ เช่น เมื่อเปิดใช้การเข้ารหัสฝั่งไคลเอ็นต์หรือเมื่อมีการโอนข้อมูลจากอุปกรณ์หนึ่งไปยังอีกอุปกรณ์หนึ่งในเครื่อง

ดูข้อมูลเพิ่มเติมเกี่ยวกับการสำรองข้อมูลในอุปกรณ์ Android ได้ที่ภาพรวมการสำรองข้อมูล

การช่วยเหลือพิเศษ

Android 9 ได้ปรับปรุงเฟรมเวิร์กการช่วยเหลือพิเศษ เพื่อให้คุณมอบประสบการณ์การใช้งานที่ดียิ่งขึ้นแก่ผู้ใช้แอป ได้ง่ายขึ้น

ความหมายของการนำทาง

แอตทริบิวต์ที่เพิ่มใน Android 9 ช่วยให้คุณกำหนดวิธีที่บริการการช่วยเหลือพิเศษ โดยเฉพาะโปรแกรมอ่านหน้าจอ จะไปยังส่วนต่างๆ ของหน้าจอได้ง่ายขึ้น แอตทริบิวต์เหล่านี้ช่วยให้ผู้ใช้ที่มีความบกพร่องทางสายตา เลื่อนดูข้อความใน UI ของแอปได้อย่างรวดเร็วและเลือกได้

ตัวอย่างเช่น ในแอปช็อปปิ้ง โปรแกรมอ่านหน้าจอจะช่วยให้ผู้ใช้ไปยังส่วนต่างๆ ได้ โดยตรงจากดีลหมวดหมู่หนึ่งไปยังอีกหมวดหมู่หนึ่ง โดยไม่ต้องให้โปรแกรมอ่านหน้าจอ อ่านสินค้าทั้งหมดในหมวดหมู่ก่อนที่จะไปยังหมวดหมู่ถัดไป

ชื่อแผงการช่วยเหลือพิเศษ

ใน Android 8.1 (ระดับ API 27) และต่ำกว่า บริการการช่วยเหลือพิเศษไม่สามารถระบุได้เสมอไปว่าเมื่อใดที่แผงใดแผงหนึ่งของหน้าจอได้รับการอัปเดต เช่น เมื่อกิจกรรมแทนที่ Fragment หนึ่งด้วยอีก Fragment หนึ่ง บานหน้าต่างประกอบด้วยองค์ประกอบ UI ที่จัดกลุ่มอย่างเป็นตรรกะและมีความเกี่ยวข้องทางภาพ ซึ่งโดยทั่วไปจะประกอบด้วย Fragment

ใน 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 ให้ใช้ API getWindowChanges() เพื่อดูว่าหน้าต่างมีการเปลี่ยนแปลงอย่างไร ในระหว่างการอัปเดตแบบหลายหน้าต่าง แต่ละหน้าต่างจะสร้างชุดเหตุการณ์ของตัวเอง เมธอด getSource() จะแสดงผลมุมมองรากของหน้าต่างที่เชื่อมโยงกับแต่ละเหตุการณ์

หากแอปกำหนดชื่อแผงการช่วยเหลือพิเศษสำหรับออบเจ็กต์ View บริการของคุณจะจดจำได้เมื่อ UI ของแอปได้รับการอัปเดต เมื่อเกิดเหตุการณ์ TYPE_WINDOW_STATE_CHANGED ให้ใช้ประเภทที่แสดงผลโดย getContentChangeTypes() เพื่อพิจารณาว่าหน้าต่างมีการเปลี่ยนแปลงอย่างไร เช่น เฟรมเวิร์กสามารถ ตรวจหาเมื่อแผงมีชื่อใหม่ หรือเมื่อแผงหายไป

การหมุน

เราได้เพิ่มโหมดที่ตรึงการวางแนวปัจจุบันไว้แม้ว่าตำแหน่งของอุปกรณ์จะเปลี่ยนไป เพื่อป้องกันการหมุนโดยไม่ตั้งใจ ผู้ใช้สามารถทริกเกอร์การหมุน ด้วยตนเองได้เมื่อต้องการโดยกดปุ่มในแถบระบบ

ในกรณีส่วนใหญ่ แอปจะได้รับผลกระทบจากการทำงานร่วมกันน้อยที่สุด อย่างไรก็ตาม หากแอปมีการหมุนที่กำหนดเองหรือใช้การตั้งค่าการวางแนวหน้าจอที่ผิดปกติ คุณอาจพบปัญหาที่ก่อนหน้านี้ไม่เคยสังเกตเห็น เนื่องจากค่ากำหนดการหมุนของผู้ใช้จะตั้งค่าเป็นแนวตั้งเสมอ เราขอแนะนําให้คุณพิจารณา ลักษณะการหมุนในกิจกรรมสําคัญทั้งหมดของแอป และตรวจสอบ ว่าการตั้งค่าการวางแนวหน้าจอทั้งหมดของคุณยังคงมอบประสบการณ์การใช้งาน ที่ดีที่สุด

ดูรายละเอียดเพิ่มเติมได้ที่การเปลี่ยนแปลง ลักษณะการทำงานที่เกี่ยวข้อง

หมุนโทรศัพท์มือถือเพื่อแสดงโหมดการหมุนใหม่ที่ให้ผู้ใช้ทริกเกอร์การหมุนด้วยตนเอง

โหมดการหมุนใหม่ช่วยให้ผู้ใช้ทริกเกอร์การหมุนด้วยตนเองได้เมื่อต้องการโดยใช้ปุ่มในแถบระบบ

ข้อความ

Android 9 นำฟีเจอร์ที่เกี่ยวข้องกับข้อความต่อไปนี้มาสู่แพลตฟอร์ม

  • ข้อความที่คำนวณล่วงหน้า: คลาส PrecomputedText ช่วยปรับปรุงประสิทธิภาพการแสดงข้อความโดยให้คุณคำนวณและแคชข้อมูลที่จำเป็นล่วงหน้า นอกจากนี้ยังช่วยให้แอปจัดวางข้อความนอก เทรดหลักได้ด้วย

  • Magnifier: คลาส Magnifier เป็นวิดเจ็ตแพลตฟอร์มที่มี API แว่นขยาย ซึ่งช่วยให้ได้รับประสบการณ์การใช้งานฟีเจอร์แว่นขยายที่สอดคล้องกันในทุกแอป

  • การลิงก์อัจฉริยะ: Android 9 ปรับปรุงคลาส TextClassifier ซึ่งใช้ประโยชน์จากแมชชีนเลิร์นนิงเพื่อระบุเอนทิตีบางอย่างในข้อความที่เลือกและ แนะนำการดำเนินการ เช่น TextClassifier จะช่วยให้แอปตรวจพบ ว่าผู้ใช้เลือกหมายเลขโทรศัพท์ จากนั้นแอปของคุณอาจแนะนำให้ ผู้ใช้โทรออกโดยใช้หมายเลขดังกล่าว ฟีเจอร์ใน TextClassifier จะแทนที่ฟังก์ชันการทำงานของคลาส Linkify

  • เลย์เอาต์ข้อความ: วิธีการและแอตทริบิวต์ที่สะดวกหลายอย่างช่วยให้ การออกแบบ UI ง่ายขึ้น ดูรายละเอียดได้ในเอกสารอ้างอิงสำหรับ TextView

การแปลงไฟล์ DEX ล่วงหน้าของ ART

ในอุปกรณ์ที่ใช้ Android 9 ขึ้นไป คอมไพเลอร์ล่วงหน้าของรันไทม์ Android (ART) จะเพิ่มประสิทธิภาพไฟล์ Dalvik Executable format (DEX) ที่บีบอัดโดยการแปลงไฟล์ DEX ในแพ็กเกจแอปให้เป็นการแสดงที่กะทัดรัดยิ่งขึ้น การเปลี่ยนแปลงนี้ช่วยให้แอปของคุณเริ่มทำงานได้เร็วขึ้นและใช้พื้นที่ดิสก์และ RAM น้อยลง

การปรับปรุงนี้เป็นประโยชน์อย่างยิ่งสำหรับอุปกรณ์ระดับล่างที่มีความเร็ว I/O ของดิสก์ช้ากว่า

การติดตามระบบในอุปกรณ์

Android 9 ช่วยให้คุณบันทึกการติดตามระบบจากอุปกรณ์ แล้วแชร์รายงานการบันทึกเหล่านี้กับทีมพัฒนาได้ รายงานนี้ รองรับหลายรูปแบบ รวมถึง HTML

การรวบรวมการติดตามเหล่านี้จะช่วยให้คุณบันทึกข้อมูลเวลาที่เกี่ยวข้องกับ กระบวนการและเธรดของแอป รวมถึงดูสถานะอื่นๆ ของอุปกรณ์ที่มีความสำคัญในระดับโลกได้

ดูข้อมูลเพิ่มเติมเกี่ยวกับเครื่องมือนี้ได้ที่ทำการติดตามระบบในอุปกรณ์