บทความนี้เป็นหนึ่งในซีรีย์บันทึกการเปลี่ยนแปลงของฟีเจอร์และ 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)
System
Custom Data Store
เพิ่ม PreferenceDataStore เพื่อรองรับการสร้าง Data Preferences ที่มีลักษณะคล้ายกับ Shared Preferences โดยเขียนคำสั่งกำหนดได้เองตามใจชอบว่าจะให้ข้อมูลเก็บไว้ที่ไหน จะเป็น Cloud หรือ Local Database ก็ได้
Background Execution Limits
จำกัดการทำงานของ Background Service และ Broadcast Receiver ที่ถูกเรียกใช้งานในแอปแต่ละตัว เพื่อลดการใช้ทรัพยากรเครื่องโดยไม่จำเป็น
Background Location Limits
จำกัดการค้นหาตำแหน่งของตัวเครื่องจากแอปต่างๆตามความเหมาะสมเพื่อลดการการใช้แบตเตอรีเยอะเกินจำเป็น
Job Scheduler Improvements
ปรับปรุงให้ JobScheduler ทำงานร่วมกับ Background Execution Limits
Cached Data
ปรับปรุงการจัดการกับข้อมูล Cache โดยจะมีการกำหนดโควต้าของแอปว่าจะมีขนาดของข้อมูล Cache ได้สูงสุดเท่าไร และเมื่อระบบต้องการเคลียร์ข้อมูลเพื่อเพิ่มพื้นที่ในเครื่อง ก็จะเริ่มลบข้อมูล Cache จากแอปที่ใช้พื้นที่เกินโควต้าก่อน และเมื่อระบบจำเป็นต้องลบข้อมูล Cache จากแอปที่ไม่ได้ใช้พื้นที่เกินโควต้าจริงๆก็จะเริ่มจากการลบข้อมูลที่เก่าที่สุดก่อน
สามารถใช้คำสั่งเพื่อกำหนดรูปแบบการลบข้อมูล Cache ได้ด้วย เช่น ถ้าจะต้องลบไฟล์ใน Directory ที่กำหนดไว้ ก็ให้ลบไฟล์ต่างๆทั้งหมดในนั้นด้วยเลย หรือ ไม่ต้องลบไฟล์นั้นทิ้ง แต่ให้เคลียร์ข้อมูลในไฟล์นั้นจนเหลือ 0 Byte แทน และในกรณีที่แอปจำเป็นต้องใช้พื้นที่เพื่อเก็บข้อมูลขนาดใหญ่ก็สามารถใช้คำสั่งเพื่อให้ระบบเคลียร์ข้อมูล Cache จากแอปต่างๆเพื่อให้พื้นที่เพียงพอกับที่กำหนดได้
WebView APIs
เพิ่ม API ต่างๆสำหรับ WebView โดยประกอบไปด้วย
- Version API สำหรับเช็คเวอร์ชันของ WebView ในเครื่อง
- Google Safe Browsing API สำหรับเปิด/ปิดการใช้งาน Google Safe Browsing บน WebView
- Termination Handle API สำหรับจัดการกับกรณีที่ Renderer Process ของ WebView ถูกระบบของแอนดรอยด์ทำลายทิ้งเพื่อคืนหน่วยความจำ
- Renderer Importance API สำหรับกำหนด Priority ให้กับ Renderer Process ของ WebView ซึ่งจะมีผลต่อการถูกระบบของแอนดรอยด์ทำลายทิ้งเพื่อคืนหน่วยความจำ
Content Provider Paging
Content Provider รองรับการโหลดข้อมูลข้อมูลแบบ Pagination เพื่อให้สามารถโหลดข้อมูลทีละชุดได้ในเวลาที่มีข้อมูลใน Content Provider เป็นจำนวนเยอะมาก
User Interface
Picture-in-Picture mode
รองรับการแสดงผลแบบ Picture-in-picture Mode ที่เคยใช้งานได้เฉพาะบน Android TV
โดยเป็นรูปแบบหนึ่งของ Multi-window Mode ที่สามารถกำหนดให้ Activity ที่แสดงผลอยู่เปลี่ยนไปแสดงเป็นหน้าต่างขนาดเล็กอยู่ที่มุมเครื่องได้ เหมาะกับการแสดงผลจำพวก Video Playback ที่ต้องการแสดงผลต่อเนื่องถึงแม้ว่าผู้ใช้จะสลับไปใช้งานแอปตัวอื่นๆ
Improved Notifications
เพิ่มความสามารถต่างๆให้กับ Notification เพื่อให้ผู้ใช้สามารถใช้งานได้ง่ายขึ้นและจัดการกับ Notification ได้ง่ายขึ้น
โดยสามารถจัดกลุ่มของ Notification เพื่อให้ผู้ใช้กำหนดรูปแบบการแสดงผลของ Notification โดยแยกจาก Notification Group ได้, รองรับการแสดง Notification Badge/Dots , ผู้ใช้สามารถปิดการแสดงผลของ Notification ในแอปที่ต้องการแบบชั่วคราวได้, กำหนดเวลาที่จะแสดง Notification ได้, กำหนดสีพื้นหลังของ Notification ผ่าน API ได้โดยตรง และเพิ่ม MessagingStyle เพื่อกำหนดรูปแบบในการแสดงผลของ Notification ให้รองรับกับการแสดงข้อความสนทนาจากผู้ใช้หลายๆคน
Autofill Framework
เพิ่มระบบ Autofill เพื่อให้ผู้ใช้สามารถกรอกข้อมูลต่างๆภายในแอปได้ง่ายขึ้น รวมไปถึงรองรับการสร้าง Autofill เพื่อใช้งานเองด้วย
Downloadable Fonts
รองรับการเพิ่มฟอนต์ลงในแอปที่ให้ผู้ใช้สามารถเลือกที่จะดาวน์โหลดฟอนต์ในภายหลังได้ ไม่ต้องใส่ฟอนต์ไว้ใน APK ตั้งแต่ตอนแรก
Fonts in XML
รองรับการกำหนดฟอนต์ผ่าน Font Resource ซึ่งทำให้กำหนดผ่าน XML ได้เลย ไม่ต้องเขียนโค้ดสั่งให้ยุ่งยากอีกต่อไป
Autosizing TextView
รองรับการทำ Autosizing บน TextView เพื่อให้สามารถปรับขนาดตามข้อความที่แสดงอยู่บนนั้นได้
Multi-display support
รองรับการแสดงผลบนหน้าจอแสดงผลหลายๆตัว
Color Management
รองรับการแสดงผลบนหน้าจอที่รองรับ Wide-gamut Color และรองรับการแสดงภาพที่มี Color Profile เป็นแบบ Wide Color เช่น AdobeRGB, Pro Photo RGB หรือ DCI-P3 เป็นต้น
Adaptive Icons
เพิ่มรูปแบบการแสดงไอคอนแอปแบบใหม่ที่รองรับการแสดงรูปทรงไอคอนและเอฟเฟคในรูปแบบต่างๆได้ง่าย โดยขึ้นอยู่กับว่าอุปกรณ์นั้นๆจะกำหนดให้แสดงแบบไหน
Maximum Screen Aspect Ratio
เพิ่ม Metadata ใน Android Manifest ที่ชื่อว่า max_aspect เพื่อกำหนด Maximum Aspect Ratio ที่แอปรองรับสำหรับการแสดงผลบนหน้าจอที่มีอัตราส่วนมากกว่า 16:9 (1.777)
Unified layout margins and padding
เพิ่ม Attribute ใน Layout XML ของ View เพื่อช่วยให้กำหนดค่า Margin กับ Padding ได้ง่ายมากขึ้น ถ้าต้องการกำหนดค่าให้กับ Top และ Bottom ก็ให้ใช้เป็น Vertical แทน และถ้าเป็น Left และ Right ก็ให้ใช้ Horizontal แทน
Pinning shortcuts and widgets
เพิ่มคำสั่งสำหรับการเพิ่ม Shortcuts และ Widgets ในหน้า Launcher ด้วยคำสั่งจากโค้ดได้
Pointer Capture
ทำให้ View ที่ต้องการสามารถรับค่าจาก Pointer ของเมาส์ได้โดยตรง โดยตอนที่ Pointer Capture ทำงาน Pointer จะไม่แสดงให้เห็น แต่ View จะสามารถรับค่าต่างๆจากเมาส์ได้ทั้งหมด
App Category
เพิ่ม Attribute ที่ชื่อว่า appCategory ใน <Application />
เพื่อให้กำหนดได้ว่าแอปดังกล่าวอยู่ในหมวดหมู่ไหน เพื่อให้ระบบของแอนดรอยด์แสดงข้อมูลการใช้งานเช่น Data Usage, Battery Usage หรือ Story Usage โดยแยกหมวดหมู่ของแอปตามที่กำหนดไว้
Android TV Launcher
ปรับเปลี่ยนรูปแบบการแสดงหน้า Launcher ของ Android TV ใหม่ทั้งหมด
Animator Set
เพิ่มคำสั่งใน AnimatorSet API เพื่อให้กำหนดช่วงเวลาที่ต้องการเริ่มเล่นและสามารถสั่งให้เล่น Animation แบบ Reverse ได้
Keyboard Navigation Clusters
สามารถกำหนดกลุ่มของ View เพื่อให้สามารถกดปุ่ม Meta + Tab (Meta ขึ้นอยู่กับคีย์บอร์ดที่ใช้ ถ้าเป็นของ Mac OS คือปุ่ม Command ส่วนของ Windows คือปุ่ม Controls และถ้าเป็น Chrome OS จะเป็นปุ่ม Search) แล้วสลับไปโฟกัส View ตัวอื่นๆที่อยู่ใน Cluster กลุ่มเดียวกัน โดย View ที่อยู่ใน ViewGroup ตัวเดียวกันจะถือว่าอยู่ใน Cluster กลุ่มเดียวกันด้วย (ไม่นับ View ที่อยู่ในระดับ Child)
Speech output
เพิ่มคำสั่งใน Text-to-speech (TTS) เพื่อให้สามารถรู้ได้ว่ากำลังพูดในแต่ละประโยคที่ช่วงเวลาไหนบ้าง
Media
Volume Shaper
เพิ่ม Volume Shaper API เพื่อให้สามารถทำ Volume Transition ผ่านโค้ดได้ เช่น การทำ Fade-in, Fade-out หรือ Cross Fade เป็นต้น
Audio Focus Enhancements
เพิ่มคลาส AudioFocusRequest เพื่อใช้กำหนดรูปแบบการทำงานของ Audio Focus ให้กับ Audio Playback ได้
Media Metrics
เพิ่มคำสั่งสำหรับแสดง Metric Data สำหรับคลาส MediaPlayer, MediaRecorder, MediaCoder และ MediaExtractor ซึ่งจะประกอบไปด้วยข้อมูลต่างๆของ Content ที่กำลังเล่นอยู่
Media Player Improvements
Media Player API รองรับการเล่นไฟล์ข้อมูลแบบ DRM-protected และ HLS Sample-level Encrypted และเพิ่มคำสั่งสำหรับกำหนดรูปแบบการ Seek ใน Media Player
Media Recorder Improvements
รองรับการเล่นไฟล์ MPEG2_TS และ MultiMuxer สามารถเพิ่ม Audio และ Video Steam ได้มากกว่า 1 Track แล้ว
Improved Media File Access
รองรับการสร้าง Documents Providers ขึ้นมาใช้งานเอง และสามารถดึงค่า URI ของ Document ที่ต้องการได้ รวมไปถึงการหา Path ของ Document นั้นๆ
Wireless & Connectivity
Wi-Fi Aware
รองรับ Wi-Fi Aware ที่เป็นแบบ Neighbor Awareness Networking (NAN) เพื่อค้นหาอุปกรณ์อื่นๆที่อยู่รอบๆด้วย Wi-Fi โดยไม่จำเป็นต้องใช้ Internet Access Point
Bluetooth Updates
รองรับ AVRCP 1.4, Bluetooth Low Energy 5.0 (BLE) และ LDAC Codec ของ Sony
Companion Device Pairing
เพิ่ม Companion Device API เพื่อควบคุมการเชื่อมต่อ Companion Device ผ่าน Bluetooth, BLE หรือ Wi-Fi
Sharing
Smart Sharing
รองรับการกำหนด Topic ของเนื้อหาที่ต้องการแชร์ผ่าน Intent เพื่อให้ระบบของแอนดรอยด์สามารถแสดงรายชื่อแอปได้ตรงกับเนื้อหามากขึ้น
Text Classifier
เพิ่ม Text Classifier API เพื่อให้ระบบสามารถวิเคราะห์คำที่ต้องการเพื่อระบุว่าข้อมูลดังกล่าวเป็นข้อมูลประเภทไหน เช่น ที่อยู่ เบอร์โทร หรืออีเมล เป็นต้น
Security & Privacy
New Permissions
เพิ่ม Permission ตัวใหม่สำหรับการใช้คำสั่งเพื่อรับสายโทรเข้าและขอเข้าถึงข้อมูลเบอร์โทรภายในเครื่อง
New Account Access and Discovery APIs
เพิ่มคำสั่งใหม่เพื่อใช้ในการกำหนดค่าเกี่ยวกับ Account ภายในเครื่อง
Runtime & Tools
Platform optimizations
ปรับปรุงประสิทธิภาพในการทำงานของ Runtime ให้ดียิ่งขึ้น ปรับ Garbage Collection ให้ทำงานแบบ Concurrent-compaction ซึ่งจะช่วยให้จัดการกับตำแหน่งของโค้ดและหน่วยความจำได้ดีกว่าเดิม ส่งผลให้ใช้ระยะเวลาในการ Boot น้อยลง และประสิทธิภาพในการทำงานของ OS และแอปดีขึ้น
Updated Java Language Support
เพิ่ม java.time ของ OpenJDK 8 และ java.nio.file กับ java.lang.invoke ของ OpenJDK 7
Updated ICU4J Android Framework APIs
อัพเดท ICU Version เป็น 58.2, CLDR Version เป็น 30.0.3 และ Unicode Version เป็น 9.0
สรุป
ก็ต้องยอมรับว่าในแต่ละเวอร์ชันก็มีอะไรเพิ่มเข้ามาเยอะแยะมากมาย เพื่อช่วยให้ผู้ใช้สะดวกสบายและสามารถทำอะไรได้มากขึ้น แต่ในอีกมุมหนึ่ง ก็ส่งผลให้นักพัฒนาต้องหมั่นปรับตัวตามอยู่ตลอดเวลาเพื่อให้แอปของผู้ที่หลงเข้ามาอ่านนั้นยังคงใช้งานได้ปกติสุข