22 February 2020

สรุปการเปลี่ยนแปลงของ Feature และ API ใน Android 7.0 Nougat (API 24)

Created on Saturday, February 22, 2020


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

สารบัญ

        • Android 11 (API 30)
        • Android 10 (API 29)
        • Android 9.0 Pie (API 28)
        • Android 8.1 Oreo (API 27)
        • Android 8.0 Oreo (API 26)
        • Android 7.1 Nougat (API 25)
        • Android 7.0 Nougat (API 24)
        • Android 6.0 Marshmallow (API 23)
        • Android 5.1 Lollipop (API 22)
        • Android 5.0 Lollipop (API 21)
        • Android 4.4 KitKat (API 19)

Android 7.0 Nougat (API 24)

User Interface

Multi-window Support

        รองรับการแสดง 2 แอปพร้อมๆกันด้วยการแบ่งพื้นที่บนหน้าจอ โดย​ Phone และ Tablet จะรองรับการแสดงผลแบบ Splitscreen ส่วน Android TV จะรองรับการแสดงผลแบบ Picture-in-picture

Notification Enhancements

        ปรับรูปแบบการแสดงผลของ Notification ใหม่ โดยสามารถเพิ่มรูปภาพให้กับ Notification นั้นๆ และกำหนดการแสดงผลด้วยคลาส MessagingStyle ได้ 

        เมื่อแสดง Notification หลายๆตัวจากแอปตัวเดียวกันจะปรับให้อยู่ในรูปแบบ Bundled Notifications เพื่อจัดกลุ่ม Notification แต่ละประเภทให้เป็นกลุ่มเดียวกัน โดยยังสามารถดู Notification แต่ละตัวแยกกันได้เหมือนเดิม รวมไปถึง Action ต่างๆด้วย 

        รองรับ Direct Reply เพื่อให้สามารถพิมพ์ข้อความตอบกลับผ่าน Notification ได้ทันทีและเพิ่ม API สำหรับ Custom View ใน Notification เพื่อให้ทำอะไรได้มากขึ้น

Quick Settings Tile API

        เพิ่ม Quick Settings Tile API เพื่อให้สามารถเข้าถึงการทำงานของ Quick Settings ที่อยู่ใน Notification Shade (Status Bar) ได้

Custom Pointer API

        เพิ่ม Custom Pointer API สำหรับกำหนดรูปแบบการแสดง Pointer เวลาควบคุมอุปกรณ์แอนดรอยด์ด้วย Mouse หรือ Touchpad 

Performance

Profile-guided JIT/AOT Compilation

        ปรับการทำงานของ Android Runtime แบบใหม่ ปรับให้ ART ทำงานแบบผสมกันระหว่าง JIT และ AOT ​โดยตอนที่ติดตั้งแอปใหม่ๆแล้วแอปถูกเรียกใช้งานจะทำงานแบบ JIT เพื่อความรวดเร็ว และเมื่อไม่ได้ใช้งานในตอนกลางคืนก็จะทำการ Compile แบบ AOT เฉพาะโค้ดส่วนที่สำคัญเพื่อให้สามารถทำงานได้เร็วขึ้นเมื่อใช้งานในครั้งต่อไป

Quick Path to App Install

        ด้วยการปรับรูปแบบของ Android Runtime ให้มีการทำงานของ JIT ผสมเข้ามาจึงทำให้การติดตั้งแอปขนาดใหญ่ๆหรือการอัปเดตระบบที่เคยใช้เวลานานมากเหลือเพียงแค่ในระดับวินาที และไม่ต้องเจอกับหน้าต่าง Optimizing App หลังจากอัปเดตระบบอีกต่อไป

Sustained Performance API

        เพิ่มการทำงานแบบ Sustained Performance เพื่อบอกให้เครื่องรักษาประสิทธิภาพในการทำงานของแอปที่ต้องการให้คงที่ได้ และระบบจะปิดการทำงานดังกล่าวทันทีเมื่อหน้าต่างแอปนั้นๆหยุดแสดงผล

Frame Metrics API

        เพิ่ม Frame Metrics API เพื่อให้แอปสามารถตรวจสอบประสิทธิภาพในการแสดง UI จากเดิมที่จะต้องทำผ่าน ADB ด้วยคำสั่ง adb shell dumpsys gfxinfo framestats อยู่เสมอ

Battery Life

Doze on the Go

        จากเดิมที่ Doze ใน Android 6.0 จะทำงานก็ต่อเมื่ออุปกรณ์แอนดรอยด์อยู่ในสถานะ Idle เมื่อไม่ได้เคลื่อนไหวใดๆเป็นระยะเวลาหนึ่ง เช่น การวางเครื่องไว้บนโต๊ะหรือพื้น

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

Project Svelte: Background Optimizations 

        มีการปรับปรุงการทำงานที่เกี่ยวกับแอปที่ทำงานอยู่เบื้องหลัง (Background App) เพื่อลดการใช้ทรัพยากรเครื่องให้น้อยลง เช่น สามารถกำหนดให้ JobScheduler สามารถทำงานโดยอิงจากการเปลี่ยนแปลงใน Content Provider ได้ 

        และลบ Implicit Broadcast ที่เกี่ยวกับ Camera และ Connectivity ที่ทำให้เครื่องถูกปลุกให้ทำงานบ่อยๆซึ่งเป็นสาเหตุที่ทำให้เปลือง Memory และแบตเตอรีโดยใช่เหตุ

Surface View

        ปรับปรุงการแสดงผลบน SurfaceView ให้ดีกว่าเดิม ซึ่งจะช่วยลดการใช้ทรัพยากรเครื่องได้มากกว่าการใช้ TextureView 

Wireless & Connectivity

Data Saver

        เพิ่ม Data Saver Mode เพื่อป้องกันการใช้ Cellular Data เกินกำหนด โดยสามารถเช็คข้อมูลต่างๆสำหรับ Data Saver บนเครื่องนั้นๆผ่านคลาส ConnectivityManager

Number Blocking

        เพิ่ม API สำหรับการบล็อคเบอร์โทรศัพท์ผ่านแล้ว ซึ่งการบล็อคเบอร์โทรศัพท์ผ่านคำสั่งใน API จะมีผลกับเบอร์ที่แสดงผลอยู่ในข้อความ, จำเบอร์ที่ถูกบล็อคตลอดผ่านฟีเจอร์ Backup & Restore และหลายๆ User ในเครื่องนั้นๆสามารถใช้รายชื่อเบอร์ที่ถูกบล็อคร่วมกันได้

Call Screening

        เพิ่มคลาส CallScreeningService เพื่อแอปที่ถูกกำหนดเป็น Default Phone App สามารถแสดง UI เมื่อมีสายโทรเข้าได้

Graphic

OpenGL ES 3.2

        รองรับ OpenGL ES 3.2

Vulkan API

        รองรับ Vulkan ที่เป็น 3D Render Engine ตัวใหม่ที่มีประสิทธิภาพดีกว่า OpenGL ES 

System

Direct Boot

        โดยปกติแล้วเมื่อเครื่องถูกเปิดขึ้นมาจนเสร็จ แต่ยังไม่ได้ปลดล็อคหน้าจอ ระบบต่างๆจะยังไม่เริ่มทำงาน เพราะข้อมูลภายในเครื่องถูกเข้ารหัส (Encrypte) อยู่ และจะเข้าถึงข้อมูลได้ก็ต่อเมื่อปลดล็อคหน้าจอในครั้งแรกที่เปิดเครื่อง ดังนั้นในช่วงที่เครื่องถูกเปิดขึ้นมาแต่ยังไม่ได้ปลดล็อคหน้าจอ แอปต่างๆจึงยังไม่เริ่มทำงาน 

        แต่ด้วยรูปแบบของ File Based Encryption แบบใหม่ใน Android 7.0 ที่จะแยกพื้นที่เก็บข้อมูลภายในเครื่องเป็น 2 ส่วนคือ Credential encrypted storage และ Device encrypted storage

        โดยข้อมูลที่อยู่ใน Credential encrypted storage จะให้เข้าถึงได้ก็ต่อเมื่อปลดล็อคหน้าจอครั้งแรกหลังจากเปิดเครื่อง ส่วน Device encrypted storage จะเข้าถึงได้ทันทีที่เปิดเครื่องเสร็จแล้ว โดยไม่จำเป็นต้องปลดล็อคหน้าจอ ซึ่งการทำงานของระบบในช่วงเวลานี้จะเรียกว่า Direct Boot Mode 

        จึงสามารถกำหนดให้แอปได้ว่าจะให้ทำงานใน Direct Boot Mode หรือไม่ จะได้ไม่ต้องรอจนเครื่องทำการ Boot จนเสร็จ

Multi-local Support & More Languages

        รองรับการกำหนดภาษาในเครื่องแบบ Multi language เพื่อให้เครื่องสามารถกำหนดภาษาที่ต้องการแสดงภายในเครื่องได้มากกว่า 1 ภาษา จึงทำให้ API ที่เกี่ยวกับการตั้งค่าภาษาภายในเครื่องมีการเปลี่ยนใหม่ด้วย

ICU4J APIs in Android

        เพิ่มคำสั่งบางชุดของ ICU4J 

APK Signature Scheme v2

        App-signing Scheme แบบใหม่ที่จะช่วยลดระยะเวลาในการติดตั้งแอปและป้องกันการดัดแปลงแก้ไขไฟล์ APK จากเดิมที่ใช้ JAR Siging

Scoped Directory Access

        เพิ่ม API ใหม่สำหรับการเข้าถึง External Storage รวมไปถึงอุปกรณ์อย่าง SD Card โดยลดขั้นตอนและคำสั่งที่ใช้ในเวอร์ชันเก่าๆให้อยู่ในรูปที่ใช้งานได้ง่ายขึ้น

Keyboard Shortcuts Helper

        รองรับการกดปุ่ม Meta + /​ (ปุ่ม Meta ขึ้นอยู่กับคีย์บอร์ดในแต่ละ OS โดยบน Mac OS คือปุ่ม Command ส่วน Windows คือ Controle และบน Chrome OS คือ Search) เพื่อแสดงหน้า Keyboard Shortcut เพื่อแสดง Shortcut ที่สามารถกดจากแอปหรือระบบของแอนดรอยด์ได้ ซึ่งสามารถกำหนด Shortcut ที่จะแสดงเอง ผ่านคำสั่ง onProvideKeyboardShortcuts() ได้

Virtual Files

        โดยปกติแล้ว การเข้าถึงข้อมูลใน Storage Access Framework ที่ผู้ใช้สามารถเข้าถึง Cloud Storage ต่างๆได้ แต่ทว่าไฟล์ที่อยู่บนพื้นที่เหล่านั้นจะอยู่ในลักษณะของ Input Stream ไม่ใช่ Bytecode โดยตรงจึงไม่สามารถเปิดไฟล์ดังกล่าวได้

        ในเวอร์ชันนี้จึงเพิ่ม Virtual Files เข้ามาไว้ใน Storage Access Framework เพื่อจำลองเป็นไฟล์ดังกล่าวแทน

Android TV Recording

        เพิ่มคำสั่งใน Time-shifting API สำหรับการบันทึก Playback Content บน Android TV 

Accessibility

Vision Settings on the Welcome Screen

        รองรับการปรับขนาดการแสดงผลของ UI และขนาดตัวอักษรได้ รวมไปถึง Touch Gesture สำหรับ Accessibility Mode

Security

Key Attestation

        สามารถสร้าง RSA หรือ EC Key Pair โดยเก็บไว้ใน Hardware-backed Keystore เพื่อป้องกันข้อมูลในแอปที่เป็นความลับ 

Network Security Config

        รองรับการตั้งค่าให้กับ Secure Connection (HTTPS/TLS)  ผ่าน XML แทนที่จะสั่งผ่านโค้ด

Default Trusted Certificate Authority

        แอปที่ทำงานบน Android 7.0 จะถูกตั้งค่าให้อนุญาตใช้ได้แค่ CA ที่มาจากระบบ (System-provided Certificates Authorities) เท่านั้น ถ้าจำเป็นต้องใช้ CA ที่ผู้ใช้เพิ่มเข้ามาเอง (User-added Certificates Authorities) จะต้องเพิ่ม CA ใน Network Security Config ด้วย ถึงจะใช้งานได้

VR

Platform Support and Optimizations for VR Mode

        เพิ่ม VR Mode เพื่อรองรับแอปที่เป็น VR ได้อย่างมีประสิทธิภาพ รวมไปถึงเซ็นเซอร์ต่างๆและ UI ที่รองรับกับการใช้งานใน VR Mode โดยเฉพาะ ซึ่งจะต้องใช้ Google VR SDK ในการพัฒนาเพื่อให้รองรับกับ VR Mode 

Printing Framework

Print Service Enhancements

        รองรับการกำหนดข้อมูลเพิ่มเติมเกี่ยวกับ Printer แต่ละเครื่องและ Print Job

สรุป

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