27 มิถุนายน 2557

[Android News] มีอะไรใหม่ใน Android L Developer Preview ! [แบบฉบับนักพัฒนา]


        ณ เวลานี้คงไม่มีอะไรที่นักพัฒนาอย่างผู้ที่หลงเข้ามาอ่านจะจับตามองไปมากเท่ากับ "บอลโลก!!" เอ้ย! "งาน Google I/O 2014" ที่มาพร้อมกับการเปิดตัว Android L Developer Preview ที่มีฟีเจอร์และลูกเล่นหลากหลายยิ่งกว่าเดิม Transition และ Animation ระหว่างการใช้งานที่ทำใหม่ได้สวยงามมากในมุมมองของ User แต่ทว่าสำหรับ Dev กลับกลายเป็นการบ้านอันยิ่งใหญ่ที่ต้องมานั่งทำกันซะงั้น ฮาๆ



        ดังนั้นบทความนี้จึงนำเสนอสิ่งที่เพิ่มเข้ามาใหม่ใน Android L Developer Preview ในแบบฉบับของนักพัฒนาแอปพลิเคชันแอนดรอยด์ เหมือนกับที่เคยทำไว้ตอน Android 4.4 เปิดตัวนั่นเอง [Android Dev Tips] มีอะไรบ้างใน Android 4.4 KitKat [แบบฉบับนักพัฒนา]

        สำหรับบทความนี้เจ้าของบล็อกอิงเนื้อหาจาก L Developer Preview - API Overview นะครับ ถ้ามีจุดไหนไม่ถูกต้องสามารถท้วงติงได้ครับ เจ้าของบล็อกจะตรวจสอบแล้วแก้ไขให้


การเปลี่ยนแปลงครั้งยิ่งใหญ่ใน Android L Developer Preview

Android Runtime ตัวใหม่ที่มีนามว่า ART 

        จะเรียกว่าใหม่ก็คงไม่น่าจะใช่ซักเท่าไร เพราะ ART เป็น Runtime ที่ถูกทดสอบได้ซักพักแล้ว โดยปล่อยมาให้ทดลองกันใน Android 4.4 KitKat ซึ่ง ART นั้นคืออะไร ดีกว่า Dalvik ยังไง เจ้าของบล็อกคงไม่ขอสาธยายละกัน เพราะว่ามี Dev ชื่อดังที่ผู้ที่หลงเข้ามาอ่านน่าจะรู้จักกันดีได้ทำการอธิบายไปแล้ว ซึ่งเจ้าของบล็อกคิดว่าคงจะอธิบายได้ไม่ดีเท่าท่านนี้ ดังนั้นตามกันไปอ่านที่ ทำความรู้จัก ART ผู้มาแทน Dalvik บน Android "L" กันได้เลย~

        ซึ่งบน Android L Developer Preview นั้นได้ลืม Dalvik ไปเป็นที่เรียบร้อยแล้ว และนำ ART มาใช้งานแบบเต็มตัว เพื่อเพิ่มประสิทธิภาพให้กับการทำงานของระบบยิ่งขึ้น และสำหรับผู้ที่หลงเข้ามาอ่านที่ไม่แน่ใจว่าแอปพลิเคชันที่สร้างขึ้นรองรับ ART หรือไม่ ทาง Android Developer ก็เตรียม Guideline ไว้ให้ตรวจสอบแล้ว Verifying App Behavior on the Android Runtime (ART)


Notification ปรับโค๊ดเพิ่มเติมและรบกวนให้น้อยลง

        จากเดิมที่ใช้ธีม Holo กันมานมนาน ที่ใช้พื้นหลังสีดำตัวหนังสือสีขาว เมื่อเปลี่ยนธีมเป็น Material ใน Android L Developer Preview ก็จะเปลี่ยนพื้นหลังเป็นสีขาว (หรือสีโทนสว่าง) แล้วให้ตัวหนังสือเป็นสีดำ (หรือสีโทนเข้ม) แทน และสามารถกำหนดสีพื้นหลังของ Icon ที่แสดงเป็น Notification ได้ด้วยคำสั่ง setColor() ที่อยู่ในคลาส Notification.Builder

        ถ้าผู้ที่หลงเข้ามาอ่านใช้คลาส Ringtone, MediaPlayer หรือ Vibrator เพื่อให้เกิดเสียงหรือการสั่นในขณะที่แสดง Notification ให้เอาออกซะเพราะในคลาส Notification.Builder เพิ่มเมธอดสำหรับกำหนดเสียงและการสั่นแล้ว

        และที่เพิ่มมาใหม่คือ Head-up Notification หรือก็คือ Floating Window Notification ที่จะโผล่มาแทนที่แถบข้างบน โดยมีเงื่อนไขว่าแอพที่เปิดอยู่เป็นแบบ Fullscreen และกำหนดใน Notification.Builder ให้เป็น FullScreenIntent หรือ Notification นั้นๆถูกกำหนดเป็น High Priority และมีการกำหนดเสียงของ Notification และมีการสั่น



        สำหรับ Head-up Notification สามารถดูตัวอย่างได้จากวีดีโอ Keynote ในงาน ณ เวลา 26 นาที 39 วินาที หรือ Keynote - Head-up Notification และสามารถศึกษาเรื่องการดีไซน์สำหรับ Notification ได้ที่ L Developer Preview - Design for Notifications


RemoteControlClient มันเปลี่ยนไปแล้วววว

        สำหรับคลาส RemoteControlClient จะใช้ทำ Media Playback Control บนหน้า Lockscreen กัน อย่างเช่น แอปพลิเคชันเพลงที่ให้ผู้ใช้สามารถควบคุมการเล่นเพลงผ่านหน้า Lockscreen ได้โดยไม่ต้องเปิดเข้าไปในแอปพลิเคชัน ซึ่งใน Android L Developer Preview ไม่ยอมให้ทำแบบนั้นซะแล้ว ดังนั้นจึงแนะนำให้ทำไว้ที่ Notification แทน

        นอกจากนี้ยังเสริมในส่วนของ Template สำหรับ Media เพื่อช่วยให้สามารถออกแบบ Media Playback Control ใน Notification ได้สะดวกยิ่งขึ้น และมีคำสั่ง setVivibility ด้วยล่ะ เพื่อให้สามารถซ่อนได้ด้วย เพราะจะมีเรื่องของ Lockscreen Notifications ที่ถูกเพิ่มเข้ามาใน Android L Developer Preview เช่นกัน


        และยังเพิ่มคลาสที่ชื่อว่า MediaSession (android.media.session.MediaSession) ที่สามารถใช้คำสั่ง setMediaToken() เพื่อให้ระบบรู้ว่า Notification ตัวนี้ยังทำงานควบคุมการเล่น Media อยู่ (สำหรับคลาส MediaSession จะพูดถึงในหัวข้อถัดไป)

        สำหรับวีดีโอในเรื่องของหัวข้อนี้สามารถดูได้จาก Session : What's new in Android ณ เวลา 25 นาที 7 วินาที หรือ What's new in Android - Media Playback Control


ActivityManager.getRecentTasks เลิกใช้แล้วนะจ๊ะ

        กรณีที่แอปพลิเคชันของผู้ที่หลงเข้ามาอ่านใช้คำสั่งนี้ (ซึ่งเจ้าของบล็อกคิดว่ามีคนใช้น้อยนะ) ใน Android L Developer Preview ได้ประกาศเลิกใช้คำสั่งนี้แล้ว และให้เปลี่ยนไปใช้คำสั่ง ActivityManager.getAppTasks() แทน


        สำหรับวีดีโอในหัวข้อนี้สามารถดูได้ที่ Session What's new in Android ณ เวลา 15 นาที 28 วินาที หรือ What's new in Android - Recent Document & Task



User Interface ที่สุดแสนจะฮือฮา

รองรับ Material Design รูปแบบใหม่ของ UI บน Android LDeveloper Preview

        ชื่อหัวข้อดูแปลกๆยังไงก็ไม่รู้ เพราะว่า Android L Developer Preview มันมาพร้อมกับ Material Design อยู่แล้ว ซึ่งประกอบไปด้วย

        • Material Theme ที่อยู่ในรูปของ @android:style/Theme.Meterial

        • View มีคำสั่งกำหนดเงาให้แล้ววว

        • เพิ่มคลาส Widget ตัวใหม่ที่มีนามว่า RecyclerView

        • Drawable animtation และ Styling effects


        • Activity Transition ในแบบ Material Design

        • Animator สำหรับ View ในแบบ Meterial Design


        • สามารถ Custom หน้าตาของ Widget และควบคุมสีของแถบบาร์ต่างๆภายในแอปพลิเคชันได้

        สำหรับการใช้งาน Meterial Design สามารถตามไปอ่านเพิ่มเติมกันได้ที่ L Developer Preview - Material Design

        ที่เจ้าของบล็อกชอบก็คงเป็น RecyclerView ที่รองรับ Android Support v7 ด้วยนี่ล่ะ! ยินดีต้อนรับเข้าสู่ยุคของ Card UI! โอเรโนะ ทาน!! (ไม่ใช่ละ)


        สำหรับวีดีโอในหัวข้อนี้สามารถดูได้ที่ Session What's new in Android ณ เวลา 2 นาที 9 วินาที หรือ What's new in Android - Graphic & UI


Lockscreen Notifications เปลี่ยนใหม่ให้มีความเป็นส่วนตัวยิ่งขึ้น

        สำหรับ Notification แบบเดิมๆ ถึงแม้ว่าจะเปิดดูได้แม้จะอยู่หน้า Lockscreen ก็ตาม แต่นั่นก็หมายความว่ามันไม่มีความปลอดภัยเลยนี่นา ดังนั้น Android L Developer Preview จึงเพิ่มในส่วนนี้มาเพื่อให้นักพัฒนาแอปพลิเคชันสามารถกำหนด Notification ของตนเองได้ว่าเป็นแบบ Public, Private หรือ Secret โดยกำหนดผ่านคำสั่ง setVisivility() ด้วยพารามิเตอร์ VISIBILITY_PRIVATE, VISIBILITY_PUBLIC และ VISIBILITY_SECRET ซึ่ง Notification ไม่ใช่ว่าไม่แสดงนะ แต่จะไม่แสดงรายละเอียดทั้งหมดเมื่อกำหนดเป็น Private หรือ Secret นั่นเอง




        สำหรับวีดีโอหัวข้อนี้สามารถดูได้ที่ Session What's new in Android ณ เวลา 28 นาที 27 วินาที หรือ What's new in Android - Lockscreen


Metadata สำหรับ Notifications 

        สามารถใช้ Metadata เพื่อช่วยในการเรียงลำดับของ Notifications ให้ฉลาดยิ่งขึ้น โดยคำสั่งจะถูกเพิ่มมาในคลาส Notification.Builder โดยมีสามคำสั่งด้วยกันดังนี้

        • setCategory() เรียงตามหมวดหมู่ของ Notification

        • setPriority() เรียงตามความสำคัญของ Notification ตามที่กำหนดไว้

        • addPerson() เรียง Notification ตามรายชื่อของบุคคลที่มี Notification เข้ามา

        สำหรับวีดีโอในหัวข้อนี้สามารถดูได้ที่ Session What's new in Android ณ เวลา 23 นาที 1 วินาที หรือ  What's new in Android - Notification in L


Recents Screen ที่เป็นได้มากกว่า Recent Apps 

        จากเดิมตั้งแต่สมัย Android 4.0 เจ้า Recents Screen หรือที่เรียกกันติดปากว่า Recent Apps นั้นจะเอาไว้ทำแค่จัดการกับ Activity ของแต่ละแอปพลิเคชันเท่านั้น สมมติว่าเจ้าของบล็อกเปิด Chrome ไว้ซักสามหน้า แต่เวลาจะกลับมาดูทั้งสามหน้าดังกล่าวต้องกด Recents Screen แล้วเลือก Chrome ก่อนแล้วค่อยกดดูแต่ละหน้า แต่สำหรับ Android L Developer Preview นี้ จะรวมไปถึง Activity กับ Document เข้าด้วยกัน โดยจะมีคลาสใหม่ที่ชื่อว่า AppTask (android.app.ActivityManager.AppTask) ให้เรียกใช้งาน ผลก็คือ Task ของหน้าเว็ปใน Chrome สามารถรวมอยู่ในหน้า Recents Screen ได้ด้วย


        โดยการเพิ่ม Document เข้าไปจะสามารถทำได้ด้วยคำสั่ง Intent.FLAG_ACTIVITY_NEW_DOCUMENT และสามารถกำหนด LaunchMode ของ Document ใน <activity> ของ Android Manifest ได้อีกด้วยว่าจะให้เป็น intoExisting หรือ always ในกรณีที่ต้องการลบออกจาก Recents Screen เมื่อปิด Activity นั้นๆ สามารถใช้คำสั่ง Intent.FLAG_ACTIVITY_AUTO_REMOVE_FROM_RECENTS หรือกำหนดใน <activity> ก็ได้ด้วยคำสั่ง autoRemoveFromRecents="true" ใน Android Manifest

        ในกรณีที่ Recents Screen มี Document หรือ Activity ที่เยอะมากจนเกินไป ก็สามารถกำหนดได้ว่าจะให้แอปพลิเคชันของผู้ที่หลงเข้ามาอ่านไปแสดงบน Recents Screen ได้เป็นจำนวนสูงสุดเท่าไร โดยกำหนดใน <applcation> ใน Android Manifest ว่า android:maxRecent แล้วตามด้วยจำนวน โดยกำหนดได้สูงสุด 100 Task เลยล่ะ


        สำหรับ Recents Screen สามารถดูตัวอย่างได้จากวีดีโอ Keynote ในงาน ณ เวลา 31 นาที 42 วินาที หรือ Keynote - Recents Screen


WebView อัปเดตใหม่เพิ่มเติมแล้วจ้า

        หลังจากที่เปิดตัว Android 4.4 KitKat ก็ได้มีการปรับปรุงใหม่โดยใช้พื้นฐานมาจาก Chromium เพื่อเพิ่มความสามารถในการทำงาน (และก็เพิ่มความลำบากของชาว Web Dev ด้วย) ตอนนี้ได้เปลี่ยนเป็น Chromium ในเวอร์ชัน 36 แล้ว (เปิดตัวตอนแรกเป็นเวอร์ชัน 30 และตอน 4.4.3 เป็นเวอร์ชัน 33)

        ซึ่งในเวอร์ชัน 36 นี้ก็ได้รองรับการทำงานต่างๆเพิ่มมากขึ้น ไม่ว่าจะเป็น WebGL WebRTC หรือ WebAudio เป็นต้น รวมไปถึงความเถียรและความปลอดภัยที่ดียิ่งขึ้น ซึ่งสามารถดูรายละเอียเพิ่มเติมได้ที่ WebView for Android



Graphic มาใหม่รองรับ OpenGL ES 3.1 แล้วววว

        นับจากที่ OpenGL ES 3.0 ปล่อยออกมาใน API 18 หรือ Android 4.3 ตอนนี้ก็เป็น 3.1 แล้ว ส่วนเรื่อง OpenGL ES คงไม่ต้องพูดถึงอะไรมากละมั้ง...เพราะเจ้าของบล็อกไม่ใช่สาย OpenGL ES เสียด้วย ดังนั้นคุณสมบัติของ OpenGL ES 3.1 จะไม่แปลให้นะ เดี๋ยวความหมายจะเพี้ยนเอาเสียปล่าว

        • Computer shaders

        • Separate shader objects

        • Indirect draw commands

        • Multisample and stencil textures

        • Shading language improvements

        • Extensions for advance blend modes and debugging

        • Backward compatibility with OpenGL ES 2.0 and 3.0

        สำหรับการใช้งาน OpenGL ES 3.1 จะประกาศใน Android Manifest ว่า

                <uses-feature android:glEsVersion="0x00030001" />

        และอย่าลืมว่าเครื่องนั้นๆต้องรองรับ OpenGL ES 3.1 ด้วยนะ


Android Extension Pack สำหรับ OpenGL ES 3.1

        ปกติการใช้งานฟังก์ชันพิเศษบางอย่างใน OpenGL ES จะต้องมี Package สำหรับฟังก์ชันนั้นๆด้วย ซึ่งต้องทำการตรวจสอบก่อนเสมอ ซึ่งเรียกกันว่า Extension ซึ่งใน Android L Developer Preview นี้ก็ได้เพิ่ม Extension Pack สำหรับ OpenGL ES 3.1 เข้ามาด้วย ชื่อว่า ANDROID_extension_pack_es31 ในกรณีที่ประกาศใน <user-feature> จะใช้เป็น GLES31Ext สำหรับ Extension Pack ตัวนี้จะประกอบไปด้วย (ไม่ขอแปลเพราะไม่สันทัด)

        • Guaranteed fragment shader support for shader storage buffers, image and atomics (fragment shader support is optional in OpenGL ES 3.1)

        • Tessellation and geometry shaders

        • ASTC (LDR) texture compression format

        • Per-sample interpolation and shading

        • Different blend modes for each color attachment in a frame buffer



Multimedia แสง สี เสียง~!

Camera API ใหม่ที่ทำอะไรได้มากกว่าเดิม (รอตัวนี้มานานแล้ว)

        เจ้าของบล็อกได้รอคอยมานมนานในที่สุดก็มาซักที เพราะงั้นหัวข้อนี้ขอละเอียดเป็นพิเศษ :D

        สำหรับ Camera API ตัวใหม่ที่หลุดข่าวมาซึ่งไปพบอยู่ใน Android 4.4 KitKat ตอนนี้ก็ปล่อยออกมาแล้ว ในรูปของ android.hardware.camera2 (ตัวเก่าเป็น android.hardware.camera) ซึ่งจะช่วยจัดการเรื่องภาพให้ดียิ่งขึ้น สามารถเข้าถึงกล้องทุกตัวที่อยู่ในระบบได้ด้วยคำสั่ง CameraManager.getCameraIdList() และเชื่อมต่อด้วยคำสั่ง CameraManager.openCamera()

        คำสั่งถ่ายภาพจะใช้คลาส CameraCaptureSession โดยระบุ Surface ที่แสดงภาพหน้ากล้องอยู่ได้ (Specify the Surface object for the captured images.)  ถ้าให้เดาก็น่าจะหมายความว่า Surface มีได้มากกว่าหนึ่งนั่นเอง และสามารถกำหนดได้ว่าจะถ่ายทีละภาพหรือถ่ายภาพต่อเนื่อง

         เมื่อทำการถ่ายภาพ Interface ของเดิมที่เป็น Camera.ShutterCallback มาใช้เป็น CameraCaptureSession.CaptureListener() แทน และเมื่อถ่ายภาพเสร็จแล้วจากเดิมที่ใช้ Camera.PictureCallback ก็จะเปลี่ยนมาเป็น CameraCaptureSession.CaptureListener() เช่นกัน ซึ่งใน Interface ตัวนี้จะมี Methods ดังนี้

                • onCaptureCompleted : ถ่ายภาพเสร็จแล้ว

                • onCaptureFailed : การถ่ายภาพล้มเหลว

                • onCaptureProgressed : อยู่ในระหว่างการถ่ายภาพ

                • onCaptureSequenceAborted : การถ่ายภาพต่อเนื่องถูกยกเลิกกลางคัน

                • onCaptureSequenceCompleted : ถ่ายภาพต่อเนื่องเสร็จแล้ว

                • onCaptureStarted : เริ่มทำการถ่ายภาพ

        เมื่อถ่ายภาพเสร็จแล้ว Metadata จะถูกส่งกลับมาด้วยในรูปของคลาส CaptureResult (ซึ่งในนี้ข้อมูลละเอียดดี) ส่วนการกำหนดค่าพารามิเตอร์ต่างๆของกล้องจะใช้คลาส CaptureRequest.Builder


Audio Playback ก็เพิ่มเติมนิดหน่อย

        โดยทั้งหมดจะเป็นการเปลี่ยนแปลงในคลาส AudioTrack ซึ่งมีดังนี้

        • ข้อมูลเสียงสามารถอยู่ในรูปของ Floating-point ได้แล้ว (android.media.AudioFormat.ENCODING_PCM_FLOAT) ทำให้มี Dynamic Range ที่ดีขึ้น ความแม่นยำเพิ่มขึ้น

        • สามารถเก็บข้อมูลของไฟล์เสียงในรูปของคลาส ByteBuffer ได้แล้ว โดยใช้คลาส MediaCodec


Media Playback Control บ๊ายบายคลาสเก่า สวัสดีคลาสใหม่

        ผู้ที่หลงเข้ามาอ่านสามารถสร้าง Media Controller ได้ด้วยคลาสใหม่ที่ชื่อว่า MediaController (android.media.session.MediaController) ที่มาแทนที่คลาส RemoteControlClient ที่พูดถึงไปในตอนแรก โดยคลาสใหม่นี้จะช่วยให้ Thread ควบคุมทำงานได้ดีขึ้นและง่ายต่อการควบคุมผ่านแอปพลิเคชันที่สร้างขึ้น และยังสามารถสร้าง Media Controller ได้หลายๆตัวสั่งงาน Playback ได้อีกด้วย โดยการทำงานจะเกิดขึ้นอยู่บนคลาส MediaSession (android.media.session.MediaSession) ซึ่ง Media Controller ทุกตัวจะต้อง Access ผ่านคลาสนี้

        ส่วนการสั่งงานต่างๆเช่น "play", "stop" หรือ "skip" จะสั่งงานผ่านคลาส MediaController.TransportControls และเมื่อมี Callback ก็จะใช้ MediaSession.TransportControlsCallback



Wireless & Connectivity การเชื่อมต่อและไร้สาย

Multiple Network Connections เชื่อมต่อได้มากกว่า 1 ทาง

        บน Android L Developer Preview จะรองรับการเชื่อมต่อเน็ตเวิร์กได้หลายทางพร้อมๆกัน โดยปกติเวลาจะเชื่อมต่อ WiFi ถ้ามีการเปิด 3G อยู่ก็จะทำการปิด 3G ทันที และเมื่อปิด WiFi ก็จะค่อยเปิด 3G ขึ้นมาทีหลัง ซึ่งทำให้การรับส่งข้อมูลมีการขาดตอนได้ ดังนั้นจึงมีการเพิ่มความสามารถให้เปิด 3G สแตนบายไว้ได้เลยในเวลาที่ WiFi ถูกปิดหรือขาดการเชื่อมต่อก็จะใช้ 3G แทนทันที ซึ่งการควบคุมการทำงานจะอยู่ในคลาส ConnectivityManager แล้วใช้คลาส NetworkRequest (android.net.NetworkRequest) ในการระบุว่าต้องการเชื่อมต่อข้อมูลทางไหนบ้าง โดยสามารถค้นหาเครือข่ายได้จากคำสั่ง ConnectivityManager.requestNetwork() หรือ ConnectivityManager.registerNetworkCallback() และมี Interface สำหรับการเชื่อมต่อเป็น ConnectivityManager.NetworkCallbackListener


Bluetooth Broadcasting รองรับการ Broadcast ผ่าน BLE

        ฺBLE หรือ Bluetooth Low Energy ถูกเพิ่มเข้ามาใน Android 4.3 และใน Android L Developer Preview ได้มีการเพิ่มให้ BLE สามารถรองรับ Bluetooth LE Peripheral Device ทำให้สามารถสร้างแอปพลิเคชันที่สามารถเชื่อมต่อกับอุปกรณ์ BLE ตัวอื่นๆได้ หรือก็คือทำให้อุปกรณ์แอนดรอยด์กลายเป็นอุปกรณ์ BLE ที่ส่งข้อมูลให้กับอุปกรณ์ตัวอื่นๆนั่นเอง เช่นทำเครื่องให้กลายเป็นอุปกรณ์นับก้าว โดยส่งข้อมูลไปที่อีกเครื่องหนึ่งผ่าน BLE

 
NFC enhancements ปรับปรุง NFC ให้ดียิ่งขึ้น

       บน Android L Developer Preview ได้ปรับปรุงให้ NFC รองรับการทำงานที่หลากหลายขึ้นและยืดหยุ่นมากขึ้น ดังนี้

                • มี Android Beam ให้เลือกในเมนู Share

                • สามารถเรียกใช้ Android Beam จากอุปกรณ์ของผู้ใช้เพื่อส่งข้อมูลได้ด้วยคำสั่ง NfcAdapter.involeBeam() ทำให้ผู้ใช้ไม่ต้องกดที่หน้าจอเองเพื่อส่งข้อมูลไปยังอีกเครื่อง

                • NDEF Record รองรับข้อมูล Text แบบ UTF-8 แล้ว โดยใช้คำสั่ง NdfRecord.createTextRecord()

                • รองรับการบันทึก NFC Application ID หรือ AID

     
Power Efficiency จัดการพลังงานให้มีประสิทธิภาพกว่าเดิม

Scheduling Jobs ทำงานให้เป็นเวล่ำเวลา

        บน Android L Developer Preview ได้มี API ตัวใหม่ที่ชื่อว่า JobScheduler (android.app.job.JobScheduler) ที่จะช่วยจัดการอายุการใช้งานแบตเตอรีให้ยาวนานขึ้น โดยระบบจะให้แอพทำงานแบบมีเงื่อนไขเฉพาะเจาะจง เช่น เมื่ออุปกรณ์กำลังชาร์จอยู่ เป็นต้น ซึ่งจะมีประโยชน์มากในสถานการณ์ดังนี้

        • เมื่อแอปทำงานในขณะที่อยู่ใช้ไม่ได้ใช้งานอยู่

        • แอปที่ทำงานเมื่อมีการชาร์จแบตเตอรี

        • แอปที่มีการทำงานที่ต้องเชื่อมต่อกับอินเตอร์เน็ต

        • แอปที่มี Task หลายตัวที่อยากให้ทำงานพร้อมๆกันตามช่วงเวลาที่กำหนด
     
        ซึ่งการระบุเงื่อนไขการทำงานของแอปพลิเคชันแบบนี้จะช่วยไม่ให้แอปพลิเคชันทำงานในยามที่ไม่จำเป็นซึ่งเป็นสาเหตุหนึ่งของการสิ้นเปลืองแบตเตอรีนั่นเอง ซึ่งแท้ที่จริงแล้ว API ในส่วนนี้ก็คือ Project Volta นั่นเอง


Developer Tools for Power Measurement

        คราวนี้มี Tools ที่ใช้วิเคราะห์การใช้พลังงานซะด้วย!!  โดยจะมีใช้ร่วมกันสองตัว ตัวแรกจะอยู่ใน dumpsys  มีชื่อว่า batterystats โดยจะให้นักพัฒนาสามารถทำการบันทึกข้อมูลสถิติการใช้พลังงานได้ โดยประกอบไปด้วย

                • ประวัติการใช้แบตเตอรีในช่วงเหตุการณ์ต่างๆ

                • สถิติโดยรวมของอุปกรณ์นั้นๆ

                • การใช้พลังงานโดยประมาณต่อ UID และ System Component

                • Per-app mobile ms per packet

                • สรุปสถิติจาก UID ของตัวระบบ

                • สรุปสถิติจาก UID ของตัวแอพ

        สำหรับวิธีการเรียกใช้จะต้องเรียกผ่าน adb shell

        adb shell dumpsys batterystats --charged <package-name>

        โดยตัวอย่างนี้คือให้แสดงสถิติการใช้พลังงานของแอปพลิเคชันตัวใดตัวหนึ่งหลังจากการชาร์จแบตล่าสุด

        เมื่อให้ทำการบันทึกข้อมูลการใช้พลังงานแล้ว เวลาจะดูข้อมูลก็จะใช้อีกตัวที่มีชื่อว่า Battery Historian ซึ่งเป็นเครื่องมือที่อยู่ใน <sdk>/tools ใช้วิเคราะห์ข้อมูลแล้วแสดงผลเป็น HTML เพื่อแสดงความสัมพันธ์ของการใช้พลังงานในกรณีต่างๆ ตามที่กำหนดไว้ตอนที่เรียกใช้งาน batterystats




การใช้งานภายในองค์กรหรือบริษัท

Managed Provisioning เรียบเรียงคำไม่ถูกทับศัพท์เอาละกัน

        Android L Developer Preview ได้เพิ่มความคุณสมบัติสำหรับการใช้งานภายในองค์กรหรือบริษัท โดย Device Administrator สามารถจัดการการใช้งานร่วมกันภายในบริษัทได้ โดยสามารถแยกโปรไฟล์ของผู้ใช้ออกจากกัน ซึ่งต่างจากระบบ User บน Tablet โดยที่กรณีนี้จะเป็นการใช้งาน Storage ร่วมกันทั้งหมด รวมไปถึงแอปพลิเคชันต่างๆ ซึ่งแอปพลิเคชันที่่ถูกล็อคไว้ด้วยระบบดังกล่าวจะมีเครื่องหมายแม่กุญแจที่ไอคอนในหน้า App Drawer


        ส่วนรายละเอียดลึกๆขอข้ามละกันเนอะ เพราะไม่ค่อยมีผู้ที่หลงเข้ามาอ่านที่จะใช้งานด้วย สำหรับขั้นตอนและรายละเอียดสามารถดูได้ที่ Android L Preview - Managed Provisioning


Task Locking ซนนักหรอ ล็อคมันซะเลย~

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

        โอ้วนี่มันฟีเจอร์ในฝันสำหรับนักพัฒนาหลายๆคนเลยนะเนี่ย สำหรับวิธีการสามารถดูได้ที่ Android L Preview - Task locking



Printing Framework

แปลงไฟล์ PDF ให้เป็น Bitmap 

        บน Android L Developer Preview สามารถ Render เอกสารจำพวก PDF ให้กลายเป็นรูป Bitmap โดยใช้คลาสที่ชื่อว่า PdfRenderer (andorid.graphic.pdf.PdfRenderer) ซึ่งต้องระบุไฟล์ผ่านคลาส ParcelFileDescriptor จากนั้นก็จะสามารถเปิดเอกสารในแต่ละหน้าด้วยคำสั่ง openPage() แล้วใช้คำสั่ง render() ที่อยู่ในคลาส PdfRenderer.Page เพื่อทำการแปลงเป็นภาพ Bitmap



Testing & Accessibility

ปรับปรุงระบบ Testing และ Accessibility ให้ดียิ่งขึ้น

        • เพิ่มคำสั่ง UiAutomation.getWindowAnimationFrameStats() และ UiAutomation.getWindowContentFrameStats() เพื่อบันทึกข้อมูล Framerate ในการแสดงผลของแอปพลิเคชัน ช่วยให้สามารถวิเคราะห์และปรับปรุงแอปพลิเคชันทำงานได้ลื่นขึ้น

        • สามารถเรียกใช้ Shell Command ผ่านคำสั่ง UiAutomation.executeShellCommand() เพื่อให้ Execute คำสั่งของ adb shell เสมือนกับว่าสั่งงานผ่านคอมยังไงยังงั้นเลย จึงทำให้สามารถใช้คำสั่งเพื่อช่วยในการวิเคราะห์ทดสอบแอปพลิเคชันที่เขียนขึ้นมาได้

        •   Accessibility Services และ Test Tools ที่ใช้ Accessibility APIs จะสามารถอ่านข้อมูลต่างๆในเวลาที่ผู้ใช้ Interactive กับหน้าจออยู่ โดยใช้คลาส AccessibilityWindowInfo (android.view.accessibility.AccessbilityWindowInfo) แล้วเรียกใช้คำสั่ง AccessibilityService.getWindows()

        • เพิ่มคลาส AccessibilityNodeInfo.AccessibilityAction เพื่อให้กำหนด Action จาก AccessibilityNodeInfo ที่ต้องการให้ทำงาน



IME

เปลี่ยน Input Language ได้ง่ายขึ้น

        รองรับการสลับไปมาระหว่าง IME หรือคีย์บอร์ดที่มีอยู่ทั้งหมดได้ง่ายๆ โดยใช้วิธีเปลี่ยนแบบวนไปเรื่อยๆ เหมือนกับการกดปุ่มลูกโลกเพื่อเปลี่ยนภาษา ซึ่งที่หมายถึงนี้ไม่ได้หมายถึงกดเปลี่ยนภาษานะ แต่มันคือการเปลี่ยนคีย์บอร์ดที่มีอยู่ในเครื่องเลย จะใช้คำสั่ง InputMethodManager.shouldOfferSwitchingToNextInputMethod() โดยระบบจะทำการเช็คว่า IME หรือคีย์บอร์ดชุดถัดไปเป็นอะไร แล้วเปลี่ยนเป็นคีย์บอร์ดตัวนั้นๆแทน



การประกาศค่าต่างๆใน Manifest

Uses feature ที่เพิ่มเข้ามาในเวอร์ชันนี้

        สำหรับบน Android L  Developer Preview จะมี <uses-feature> เพิ่มเข้ามาสองตัวด้วยกันดังนี้

        • FEATURE_LEANBACK : ประกาศให้แอปพลิเคชันรองรับเฉพาะอุปกรณ์แอนด์ที่เป็น Android TV
       
   <uses-feature android:name="android.software.leanback"  
                 android:required="true" />

        • FEATURE_WEBVIEW : ประกาศให้แอปพลิเคชันรองรับเฉพาะอุปกรณ์ที่มี android.webkit.* APIs
       
   <uses-feature android:name="android.software.webview"  
                 android:required="true" />


แถมให้พิเศษกับ Compatibility 
อันที่มาใหม่อันไหนใช้กับเวอร์ชันเก่าได้บ้าง?

        ซึ่งเรื่องนี้ทางทีม Android ก็มีชี้แจงไว้เรียบร้อยแล้วว่าอะไรรองรับเวอร์ชันไหนบ้าง ซึ่งบอกไว้ที่ L Developer Preview - Compatibility โดยจะมีหลักๆด้วยกัน 4 อย่างคือ

        Material Theme - อันนี้เฉพาะบน Android L Developer Preview เท่านั้น ดังนั้นเวอร์ชันเก่าๆก็ขอให้ใช้ Holo Theme กันต่อไป โดยสามารถแยก Theme ได้โดยกำหนดที่โฟลเดอร์ values

                • เวอร์ชันเก่ากว่า L : res/values/styles.xml ใช้เป็น Holo Theme

                • เวอร์ชัน L : res/values-v21/styles.xml ใช้เป็น Material Theme


        Layout - อันนี้ก็เช่นกัน มี Widget หรือ View ใหม่ๆเพิ่มเข้ามา ซึ่งรองรับเฉพาะบน Android L Developer Preview เท่านั้น ดังนั้นถ้าต้องการเรียกใช้งาน Widget หรือ View ที่มาใหม่ใน Android L Developer Preview ก็ให้ใช้วิธีทำ Layout ของเวอร์ชันเก่ากับเวอร์ชันใหม่แยกกัน

                • เวอร์ชันเก่ากว่า L : res/layout/xxxxx.xml

                • เวอร์ชัน L : res/layout-v21/xxxxx.xml

        แต่สำหรับ RecyclerView กับ CardView นั้นจะรองรับเวอร์ชันเก่าๆด้วย ซึ่งดูที่ข้อถัดไปเลย


        UI Widgets - RecyclerView และ CardView จะมีอยู่ใน Android L Developer Preview Support Library จึงทำให้สามารถใช้กับเวอร์ชันเก่าๆได้จนถึง v7 แต่ทว่า CardView จะมีข้อจำกัดอยู่บ้าง เพราะบางลูกเล่นเป็น Style ของ Meterial Theme ซึ่งสามารถดูการเรียกใช้งานได้ที่ L Developer Preview - UI Widgets

        Animation APIs - อันนี้ก็ไม่รองรับในเวอร์ชันเก่าๆเหมือนกัน ซึ่งเป็น APIs ใหม่ๆที่เพิ่มเข้ามาใน Android L Developer Preview ซึ่งมีดังนี้

                • Activity Transitions

                • Touch Feedback

                • Reveal Animations

                • Path-based Animations

        เพื่อให้แอปพลิเคชันสามารถรองรับในเวอร์ชันเก่าด้วย ถ้าเรียกใช้ Animation APIs ที่มีเฉพาะใน Android L Developer Preview ก็ควรจะตรวจสอบเวอร์ชัน Runtime เสียก่อนที่จะเรียกใช้ APIs เหล่านี้



ครบหมดแล้วววววววววว

        ในที่สุดก็สาธยายจนครบทุกตัวที่มีอยู่ในหน้า API Overview ขออภัยใน API บางตัวที่อธิบายไม่ค่อยได้เรื่องเนื่องจากไม่ค่อยได้ใช้ตัวนั้นๆ แต่ที่สำคัญ อย่าลืมว่านี่คือ Android L Developer Preview เพราะงั้นพอถึงวันที่ Android L เปิดตัวอย่างเต็มตัวก็อาจจะมีบางอย่างเพิ่มเติมเข้ามาหรือปรับเปลี่ยนบางอย่าง ดังนั้นพยายามอัพเดทเรื่อยๆด้วยนะ XD

        สำหรับ Reference ณ ตอนนี้ทางทีมงาน Android ยังไม่ได้ Publish ขึ้นหน้าเว็ปหลักนะครับ แต่ทว่าแจกไว้ในส่วนของ Preview อยู่ สามารถไปดาวน์โหลดมาดูกันได้ที่ L Developer Preview - Reference

        สำหรับ Official Sample Source Code ของ Android L Developer Preview สามารถดูได้ที่ L Developer Preview - Samples


        ขอให้สนุกสุขสมกับ Material Design นะคร้าบบบบ XD




เหล่าพันธมิตรแอนดรอยด์

Devahoy Layer Net NuuNeoI The Cheese Factory Somkiat CC Mart Routine Artit-K Arnondora Kamonway Try to be android developer Oatrice Benz Nest Studios Kotchaphan@Medium Jirawatee@Medium Travispea@Medium