ในที่สุด Android 5.0 Lollipop ก็ได้เปิดตัวกันไปเป็นที่เรียบร้อยแล้ว ก็มีทั้งผู้ที่ดีใจเพราะได้กินอมยิ้ม และผู้ที่เสียใจเพราะต้องนั่งแพลอยน้ำไป แต่เชื่อว่าส่วนใหญ่ก็ถูกใจกับการมาของเวอร์ชันนี้กันค่อนข้างมาก เพราะว่ามีทั้ง Material Design ที่เปลี่ยนการทำงานของ UI และลูกเล่นต่างๆให้สวยยิ่งขึ้น หรือฟีเจอร์ใหม่ๆที่เพิ่มเข้ามา (ผมก็ด้วย)

      และเมื่อคืน (ราวๆ 5 ทุ่มครึ่งของวันที่ 17 เดือนตุลาคม) ทางทีมแอนดรอยด์ก็ได้มีการปล่อยชุดพัฒนาสำหรับ Android 5.0 มาเป็นที่เรียบร้อยแล้ว รวมไปถึงตัว System Image สำหรับ Nexus 5 และ Nexus 7 ที่ยังคงเป็นตัว Preview อยู่ แต่ก็เรียกได้ว่าเป็น Final Preview System Image กันแล้วล่ะ ซึ่งตัวที่ปล่อยก่อนหน้านั้นเรียกว่าเป็นตัวทดสอบคร่าวๆเสียมากกว่า เพราะลูกเล่นบางอย่างยังไม่มี และการทำงานบางอย่างก็ยังไม่รองรับ ดังนั้นการปล่อย System Image ในครั้งนึงจึงเรียกได้ว่าเกือบสมบูรณ์ที่สุดแล้ว เพื่อให้นักพัฒนาได้เอาไปลองติดตั้งแล้วปรับปรุงการทำงานของแอพฯให้เข้ากับ Android 5.0 

     ดังนั้นก็เลยขอนำเสนอ Android 5.0 ในมุมมองของนักพัฒนากันบ้างว่าต้องเจออะไรกันบ้างในเวอร์ชันนี้

 

 

API Level 21

      อย่างแรกสุดที่จะต้องรู้กัน คือ API Level เพราะในแต่ละเวอร์ชันของระบบแอนดรอยด์จะมีเลขกำกับแต่ละเวอร์ชันที่ไม่ใช่แค่ 2.3.6 หรือ 4.2.2 แต่สำหรับนักพัฒนาจะมองเป็นเลข API Level แทน โดยที่ Android 4.4 คือ API 19 ส่วน Android 4.4W คือ API 20 และสำหรับ Android 5.0 ก็จะมี API Level เป็น 21 ซึ่งเลข 21 นี่ล่ะที่นักพัฒนาจะใช้กันในเวลาที่กำหนดว่าแอพฯของเค้าจะรองรับเวอร์ชันอะไรบ้าง หรือคำสั่งนั้นๆจะใช้สำหรับแอนดรอยด์เวอร์ชันอะไร

 

 

ปรับตัวเข้าสู่ Android Runtime (ART)

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

  • ทำงานด้วย Java Native Interface (JNI)
  • พัฒนาด้วยเครื่องมือพัฒนาที่นอกเหนือไปจาก ADT หรือ Android Studio
  • มีการทำงานพิเศษบางอย่างที่ไม่รองรับกับ Garbage Collection (ตัวจัดการหน่วยความจำอัตโนมัติ)

 

 

Notification แบบใหม่

      บน Android 5.0 จะมีฟีเจอร์บน Notification เพิ่มเข้ามาที่เรียกว่า Heads-up Notification ที่จะแสดง Notification ข้างบนสุดของหน้าจอเพื่อไม่ให้ขัดจังหวะผู้ใช้งานที่กำลังใช้แอพฯใดๆอยู่  ซึ่งแอพฯที่มี Notification ก็อาจจะต้องปรับตัวให้รองรับกับฟีเจอร์ดังกล่าว อาจจะต้องมี Action ที่อยู่ใต้ Notification เพื่อให้ผู้ใช้กดเลือกทันทีโดยไม่ต้องเสียเวลาลาก Notification ลงมาดู

        และถ้าสังเกตดีๆจะเห็นว่า Notification เปลี่ยนพื้นหลังจากสีดำเป็นสีขาว และตัวหนังสือสีขาวเป็นสีดำ เพราะงั้นแอพฯที่ Custom Notification ก็ต้องปรับตามให้เหมาะสม

      และมีการเพิ่มเรื่อง Visibility เข้ามาสำหรับ Notification ที่จะช่วยให้ Notification มีความเป็นส่วนตัวมากขึ้น เช่น ถ้ามีข้อความจากแอพฯแชทซักตัวแสดงขึนมาระหว่างที่อยู่ในหน้า Lock Screen สิ่งที่ผู้ใช้เห็นในตอนนั้นก็จะเป็นข้อความเช่น “นาย ก ได้ส่งข้อความเข้ามา” แต่เมื่อผู้ใช้ปลดล็อคหน้าจอแล้วดู Notification ตัวเดิมอีกครั้งก็จะเป็น “นาย ก ส่งข้อความว่า วันนี้โดนแฟนสาวจับได้ว่ามีชู้กับผู้ชาย” ดังนั้นแอพฯที่ทำเกี่ยวกับ Notification ก็จะต้องปรับข้อมูลที่แสดง Notification ให้เหมาะสม โดยจะมีการแบ่งเป็น 3 ระดับคือ Secret, Private และ Public

 

 

ย้าย Music Controller ไปอยู่บน Notification Lockscreen

      ถ้าคุณชอบฟังเพลงบนแอนดรอยด์อยู่ประจำ ก็คงจะคุ้นเคยกับแอพฯเพลงที่สามารถควบคุมผ่านหน้าจอ Lockscreen ได้ แต่สำหรับ Android 5.0 ทางทีม Android ได้นำเสนอ Notification Locscreen แทน จึงทำให้ Music Controller จะย้ายไปอยู่บน Notification Lockscreen แทน ดังนั้นนักพัฒนากต้องเปลี่ยนการทำงานของแอพฯใหม่ แถมยังต้องแยกส่วนสำหรับเวอร์ชันเก่าอีกด้วย และในเวอร์ชันใหม่คำสั่งก็จะมีการเปลี่ยนแปลงไปจากเดิม ซึ่งข้อดีก็คือรองรับ Android Wear และ Anroid TV ได้ด้วย (ถ้านักพัฒนาอยากจะทำเพิ่ม)

     

 

User Interface แบบ Material Design

      เนื่องจาก Android 5.0 ได้นำเสนอดีไซน์แบบใหม่ที่ชื่อว่า Material Design จึงเป็นอีกหนึ่งทางเลือกสำหรับนักพัฒนาแอพฯว่าจะปรับหน้าตาเป็นแบบใหม่หรือไม่ โดยระบบก็จะมี APIs ที่รองรับกับการออกแบบในแบบ Meterial Design ให้ เพื่อให้จัดการได้สะดวกยิ่งขึ้น เช่น

  • Material Theme
  • View Shadow
  • Drawable animation and styling effects

 

 

 

Screen capturing and sharing

      อันนี้เรียกได้ว่าอยากจะฉลองเป็นอย่างมาก เพราะใน Android 5.0 สามารถทำ Screenshare ได้แล้ว ซึ่งเคยเป็นข้อจำกัดสำหรับไอเดียของใครหลายๆคนเป็นอย่างมากที่อยากจะ Screenshare หน้าจอไปยังที่อื่นๆ ดังนั้นคุณสมบัตินี้จึงทำให้เตรียมรอดูแอพำหรับแชร์หน้าจอได้เลยโดยเฉพาะแอพฯจำพวก Conference

 

 

OpenGL ES 3.1

     OpenGL ES เรียกได้ว่าเป็น 3D Engine ยอดนิยมสำหรับนักพัฒนาหลายๆคน ซึ่งใน Android 5.0 ก็รองรับ OpenGL ES 3.1 เป็นที่เรียบร้อยแล้ว แต่การเปลี่ยนแปลงตรงนี้มักจะไม่เกิดขึ้นกับแอพฯเก่ามากนัก เพราะส่วนใหญ่นักพัฒนาจะหันไปใช้กับแอพฯตัวใหม่เลยซะมากกว่า

 

 

Camera API

     น่าจะรู้กันแล้วว่า Android 5.0 มากับกล้องตัวใหม่ที่รองรับการทำงานมากขึ้งอย่างเช่น รองรับ RAW, ปรับ Auto-focus แบะ Auto-exposure ได้ ซึ่งเรียกว่าเป็น Camera 2 API ละกัน เพราะมันคือ API ที่แยกออกมาจาก Camera API ตรงนี้จะเรียกว่าเป็นภาระของนักพัฒนาก็ไม่เชิง แต่จะช่วยให้มีมาตรฐานหลักของคำสั่งมากกว่า เพราะว่าฟีเจอร์เหล่านี้มีบนหลายๆรุ่นแล้วแต่ว่าการจะเรียกใช้งานคือต้องเข้าไปศึกษา Reference ของแต่ละรุ่นอีกที ดังนั้นจึงช่วยให้นักพัฒนาจัดการได้ง่ายขึ้นมากกว่า

 

 

Project Volta

     อันนี้เป็นฟีเจอร์ใหม่บน Android 5.0 ที่จะช่วยให้ระบบจัดการกับแบตเตอรีได้ดียิ่งขึ้น ซึ่งความสามารถนี้ต้องมองไปที่ระบบเก่าก่อนว่า เดิมทีการทำงานจำพวก Background Process ของแต่ละแอพจะมีอิสระในการกำหนดช่วงเวลาการทำงานที่ค่อนข้างสูงจนเกินไป ยกตัวอย่างเช่น มี 2 แอพฯคือ A กับ B

  • แอพฯ A จะคอยเช็คตลอดเวลาว่าอุปกรณ์ต่ออินเตอร์เน็ตหรือไม่ ถ้าต่ออยู่ก็จะสั่งให้ Service ของแอพทำงาน
  • แอพฯ B จะคอยเช็คตลอดเวลาว่าอุปกรณ์มีการชาร์จอยู่หรือไม่ ถ้าชาร์จอยู่ก็จะสั่งให้ Service ของแอพทำงาน

      จะเห็นว่า A และ B มีสิ่งที่เหมือนๆกันคือ คอยเช็คอยู่ตลอด ซึ่งตรงนี้นี่แหละที่จะทำให้มี Background Process ที่สิ้นเปลืองอยู่ตลอดเวลา (นึกภาพแอพฯ 10 กว่าแอพฯที่ทำงานแบบ “ตัวใครตัวมัน”) จึงเป็นส่วนหนึ่งที่ทำให้มือถือถูก Awake จาก Background Process อยู่ตลอดเวลา ดังนั้น Project Volta จึงออกคำสั่งที่เรียกว่า JobScheduler ขึ้นมา เพื่อให้แต่ละแอพฯกำหนดได้ว่าจะให้เรียก Services ของแอพเมื่อเครื่องอยู่ในสถานะต่ออินเตอร์เน็ต นึกภาพง่ายๆก็เหมือนลงทะเบียนไว้กับระบบ แล้วพอถึงเวลาตามที่ลงไว้ ระบบก็จะไปเรียกแอพฯนั้นๆให้ตามที่ลงทะเบียนไว้นั่นเอง ดังนั้น JobSchedule ที่ว่านี้ก็จะเปรียบเสมือนคนที่คอยเช็คการทำงานของระบบเพียงแต่ผู้เดียว ซึ่งจะช่วยให้เครื่องมี Background Process ที่ไม่จำเป็นลดน้อยลง ส่งผลให้เครื่องเข้าสู่ Deep Sleep ได้บ่อยขึ้น นานขึ้น และกินแบตน้อยลงนั่นเอง
      ดังนั้นแอพฯที่ฟีเจอร์บางอย่างที่ทำงานในลักษณะที่คล้ายๆกันนี้ก็จะต้องไปปรับใหม่ให้เข้ากับ Project Volta เพื่อไม่ได้ทำงานสิ้นเปลืองเกินจำเป็น เพราะงั้นในตอนนี้ Project Volta อาจจะใช้งานได้ไม่เต็มประสิทธิภาพเท่าที่ควร จนกว่าแอพฯจะรองรับกันเยอะๆ

 

 

IME สลับคีย์บอร์ดไปมาให้ง่ายขึ้น  

      จากเดิมที่อยากจะเปลี่ยนคีย์บอร์ดที่ใช้อยู่ก็จะต้องลาก Notification ลงมาแล้วกดที่คีย์บอร์ดที่ใช้อยู่แล้วจึงจะเปลี่ยนคีย์บอร์ดได้ แต่ใน Android 5.0 ก็ได้เพิ่มให้คีย์บอร์ดแต่ละตัวสามารถเพิ่มปุ่มกดสำหรับเปลี่ยนคีย์บอร์ดเข้าไปได้ สมมติว่าผมใช้คีย์บอร์ด 1 อยู่ เมื่อกดปุ่มที่ว่าก็จะสลับไปคีย์บอร์ด 2 ทันที และจะวนไปเรื่อยๆตามจำนวนคีย์บอร์ดที่มี ดังนั้นภาระในส่วนนี้ก็จะเป็นแอพฯจำพวกคีย์บอร์ดนั่นเอง ถ้ายังนึกไม่ออกว่าจะสลับคีย์บอร์ดไปเพื่ออะไร ก็ให้ลองนึกว่าสลับไปมาระหว่างคีย์บอร์ดที่ใช้อยู่ปกติกับที่เป็น Emoji ดู

 

 

Uses-Feature

      ในส่วนนี้อาจจะฟังดูเข้าใจยากไปหน่อย เพราะตรงส่วนนี้ไม่ใช่ Permission แต่อย่างใด แต่มีไว้ตรวจสอบอุปกรณ์ที่จะติดตั้งแอพฯตัวนั้นๆได้ เช่น แอพฯกล้องถ่ายรูป ก็จะมี Uses-Feature ที่เอาไว้บังคับว่า “เครื่องที่ลงได้ต้องเป็นเครื่องที่มี FEATURE_CAMERA เท่านั้น” (จึงเป็นสาเหตุว่าทำไมเครื่องที่ไม่รองรับจะหาแอพฯบน Google Play Store ไม่เจอ) ข้อดีคือนักพัฒนาไม่ต้องปวดหัวกับเครื่องที่มีหลากหลายมากนัก เพราะเมื่อใช้คำสั่งที่เกี่ยวกับ Camera เมื่อไร Uses-Feature ของแอพฯก็จะประกาศให้ทันที แต่สมมติว่ากล้องไม่ใช่การทำงานหลัก และอยากให้ใช้งานได้อยู่ถึงแม้จะไม่มีกล้องก็ตาม ก็ไปยกเลิก Uses-Feature ที่ว่านี้ได้ ซึ่งใน Android 5.0 ก็จะมี Uses-Feature ที่เพิ่มเข้ามาสำหรับการทำงานใหม่ๆใน Android 5.0 ดังนี้

  • FEATURE_AUDIO_OUTPUT
  • FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING
  • FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR
  • FEATURE_CAMERA_CAPABILITY_RAW
  • FEATURE_CAMERA_LEVEL_FULL
  • FEATURE_GAMEPAD
  • FEATURE_LIVE_TV
  • FEATURE_MANAGED_USERS
  • FEATURE_LEANBACK
  • FEATURE_OPENGLES_EXTENSION_PACK
  • FEATURE_SECURELY_REMOVES_USERS
  • FEATURE_SENSOR_AMBIENT_TEMPERATURE
  • FEATURE_SENSOR_HEART_RATE_ECG
  • FEATURE_SENSOR_RELATIVE_HUMIDITY
  • FEATURE_VERIFIED_BOOT
  • FEATURE_WEBVIEW

      จะเห็นว่ามี Uses-Feature ที่ชื่อว่า FEATURE_AUDIO_OUTPUT ด้วย เพราะว่าใน Android 5.0 สามารถรองรับ USB Audio ได้ด้วย ดังนั้นแอพฯที่เรียกใช้งาน USB Audio ก็จะต้องเช็คตรงนี้ก่อนว่าเครื่องนั้นๆรองรับหรือไม่

      สำหรับในส่วนนี้จะเป็นมีไว้สำหรับนักพัฒนาที่ทำแอพฯที่มีฟีเจอร์ใหม่ๆใน Android 5.0 เท่านั้น ส่วนแอพฯเก่าๆไม่ต้องปรับอะไร เว้นแต่ว่าเพิ่มฟีเจอร์เหล่านี้เข้าไปนั่นเอง

 

 

สรุป

      จากที่เห็นมาทั้งหมดนี้เรียกได้ว่าเป็นแค่ส่วนหนึ่งของ Androids 5.0 เท่านั้นนะ เพราะผมยกหัวข้อใหญ่ๆมาเท่านั้น ซึ่งการมาของแอนดรอยด์ในแต่ละเวอร์ชัน นักพัฒนาก็จะต้องเจอกับเรื่องแบบนี้ทุกครั้ง (เพื่อความสุขของปวงชนผู้ใช้) ซึ่งบางเวอร์ชันก็อาจจะมีบางอย่างเพิ่มเข้ามา และบางเวอร์ชันก็ยกเลิกบางอย่างไปแล้วให้ใช้อันใหม่แทน จึงเป็นเรื่องน่าเศร้าของนักพัฒนาที่ต้องคอยปรับให้แอพฯของตนเองนั้นรองรับกับทุกๆเวอร์ชัน