22 February 2020

สรุปการเปลี่ยนแปลงของ Feature และ API ใน Android 8.0 Oreo (API 26)

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 8.0 Oreo (API 26)

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

สรุป

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