สรุปการเปลี่ยนแปลงของ Feature และ API ใน Android 7.0 Nougat (API 24)
บทความนี้เป็นหนึ่งในซีรีย์บันทึกการเปลี่ยนแปลงของฟีเจอร์และ API ในแอนดรอยด์แต่ละเวอร์ชัน สำหรับผู้ที่หลงเข้ามาอ่านคนใดต้องการดูของเวอร์ชันอื่นๆ สามารถกดดูได้จากลิ้งข้างล่างนี้ได้เลย
สารบัญ
- 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)
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
สรุป
ก็ต้องยอมรับว่าในแต่ละเวอร์ชันก็มีอะไรเพิ่มเข้ามาเยอะแยะมากมาย เพื่อช่วยให้ผู้ใช้สะดวกสบายและสามารถทำอะไรได้มากขึ้น แต่ในอีกมุมหนึ่ง ก็ส่งผลให้นักพัฒนาต้องหมั่นปรับตัวตามอยู่ตลอดเวลาเพื่อให้แอปของผู้ที่หลงเข้ามาอ่านนั้นยังคงใช้งานได้ปกติสุข