Table of Contents
Android Activity Lifecycle คืออะไร?
ในการทำงานของแอปพลิเคชันจริง ๆ แล้วไม่ได้ทำงานเพียงแค่เฉพาะเวลาที่ผู้ใช้งานเปิดขึ้นมาบนหน้าจอเท่านั้น แต่ยังคงทำงานบางอย่างในขณะที่แอปพลิเคชันถูกย่อ หรือแม้กระทั่งตอนที่ผู้ใช้เปลี่ยนไปใช้แอปพลิเคชันอื่นอยู่ ซึ่งจริง ๆ แล้ว Android สามารถออกแบบกำหนดให้แอปพลิเคชันทำงานในสถานะต่าง ๆ ได้
Android เรียกสิ่งนี้ว่า Activity Lifecycle ที่มีการทำงานที่ไม่เหมือนกับ Programming Code ทั่วไปที่ใช้กัน โดยใช้ภาษา Java หรือ Kotlin แล้ว Activity Lifecycle มีการทำงานอย่างไรต่อการพัฒนาแอปพลิเคชัน พร้อมยกเคสตัวอย่างประกอบให้เห็นภาพรูปแบบการทำงาน จะมีข้อมูลอะไรน่าสนใจบ้างไปดูกันครับ
Activity Lifecycle ทำงานอย่างไร?
ลองนึกภาพว่าคุณกำลังเปิดแอปพลิเคชันตัวหนึ่งอยู่บนหน้าจอ ในระบบการทำงานด้านหลังก็จะมี Activity ตัวหนึ่งทำงานอยู่เป็นตัวแรกบนหน้าจอ และเมื่อผู้ใช้งานกดเปลี่ยนหน้าซึ่งคือการเปลี่ยนไปเป็น Activity ตัวอื่น สิ่งที่เกิดขึ้นสำหรับ Activity ตัวแรกมันไม่ได้หายไปไหน แต่จะถูกเก็บไว้ในสิ่งที่เรียกว่า ‘Activity Back Stack’
ระบบของ Android ไม่ได้ถูกออกแบบมาให้เขียนแอปฯ อยู่บนฟังก์ชัน main() เหมือนหลาย ๆ ภาษา แต่ในระบบ Android จะมี Method ที่ทำงานสัมพันธ์กับ Activity Lifecycle อยู่ 7 Method ซึ่งแต่ละตัวก็จะอยู่ในสถานะและเงื่อนไขการทำงานที่แตกต่างกัน โดยจะทำงานร่วมกันเป็น Activity Lifecycle เพื่อให้เข้าใจง่ายการทำงานของทั้ง 7 method จะสามารถจับกลุ่มแจกแจงการทำงานได้ดังนี้
◆ onCreate() ทำงานเมื่อ Activity ถูกสร้างขึ้น
◆ onDestroy() ทำงานเมื่อ Activity ถูกทำลาย หรือ ปิดการทำงาน
————————————
◆ onStart() ทำงานเมื่อ แสดง Activity ให้ผู้ใช้งานเห็นบนหน้าจอ
◆ onStop() ทำงานเมื่อ สลับ Activity เก็บไปอยู่ในส่วน Back stack ผู้ใช้งานจะไม่เห็นบนหน้าจอ
◆ onRestart() ทำงานหลังจาก method onStop() แล้วมีการเรียก Activity ให้กลับมาทำงานอีกครั้ง เพื่อกลับเข้าไปอยู่สถานะ onStart() อีกครั้ง
———————————–
◆ onResume() ทำงานเมื่อ Activity ขึ้นมาอยู่บนหน้าจอ (Foreground state)
◆ onPause() ทำงานเมื่อ Activity ออกจากหน้าจอ หรือ ถูกซ่อนไปอยู่ส่วนด้านหลัง (ฺBack stack)
โดย method ทั้ง 7 ตัวนี้จะทำงานในช่วงเวลา หรือ Lifetime ที่แตกต่างกัน สามารถไปดูตัวอย่างได้ในหน้าถัดไปเลยครับ
Lifetime Activity
โดย Method ทั้ง 7 ตัวจะแบ่ง Lifetime ออกเป็น 3 ช่วงเวลาได้แก่
◆ Entire Lifetime ช่วงเวลาเริ่มต้น และช่วงเวลาสิ้นสุดของ Activity นั้น จะมี Method ที่ถูกเรียกในช่วงเวลานี้คือ onCreate() และ onDestroy()
◆ Visible Lifetime ช่วงเวลาที่ Activity ถูกแสดงผลให้เห็นบนหน้าจอ ซึ่ง Method ที่เกี่ยวข้องจะมี onStart() onStop() และ onRestart()
◆ Foreground Lifetime ช่วงเวลาที่ Activity ถูกเรียกขึ้นมาอยู่บนสุดหน้าจอเป็น Foreground Activity จะมี Method onResume() และ onStop() ทำงานอยู่ในช่วงเวลานี้
ความแตกต่างระหว่าง Foreground Lifetime และ Visible Lifetime คืออะไร?
Foreground Lifetime คือช่วงเวลาที่ Activity นั้นอยู่บนสุด แต่การทำงานของ Activity Back stack อื่น ๆ ที่อยู่ในส่วน Back stack บางตัวยังสามารถแสดงผลให้เห็นบนหน้าจอได้บางส่วน เพราะ Activity Back stack นั้นถูกเขียนให้ยังคงทำงานได้ ตัวอย่างเช่น ตัวเล่นเพลงของ Spotify หรือ Youtube music หรือ Popup chat ของ Messenger เป็นต้น Activity Back stack เหล่านี้ยังคงทำงานอยู่ในช่วงเวลาของ Visible Lifetime ทำให้นักพัฒนาสามารถแยกและกำหนดว่าตอนไหน Activity จะทำงานอยู่บนหน้าจอ และตอนไหนยังคงทำงานอยู่เบื้องหลังนั่นเอง
เพื่อให้เห็นภาพมากขึ้น ลองไปดูตัวอย่างการใช้งานแอปพลิเคชันในหน้าถัดไปเลย
ตัวอย่างการทำงานของ Activity Lifecycle ของ Android App
ขอยกตัวอย่างแอปพลิเคชันง่าย ๆ ที่หลายคนน่าจะเคยได้ใช้กัน นั่นคือ Google map ในขั้นตอนแรกของการทำงาน Activity Lifecycle เมื่อเปิดแอปขึ้นมาครั้งแรก เป็นดังต่อไปนี้
- เมื่อเราได้ทำการเปิดแอปพลิเคชันขึ้นมา Activity ตัวแรกสุดจะถูกเรียกขึ้นมาเข้าสู่ช่วงเวลา Entire Lifetime ทำให้ onCreate() ถูกเรียกใช้ขึ้นมา
- และเนื่องจากเป็น Activity เดียวที่ถูกเรียกขึ้นมาบนหน้าจอทำให้เข้าสู่ Visible Lifetime เรียก onStart() ต่อทันที
- Activity ถูกเรียกไปในช่วงเวลา Foreground Lifetime ต่อเนื่องทันที เพราะเป็นเพียง Activity เดียวที่ถูกเรียกขึ้นมาแสดงผลบนหน้าจอ ด้วย method onResume()
Activity แรกสุดของ Google map เมื่อคุณเปิดแอปพลิเคชัน หน้าแรกที่จะแสดงผล เข้าสู่สถานะพร้อมที่จะใช้งาน ก็คือหน้าแผนที่ตาม Location ที่คุณอยู่นั่นเอง
ขอยกตัวอย่างการเรียก Activity ตัวที่สองขึ้นมาของแอป Google map นั่นก็คือการกด Search หาสถานที่ หน้าจอจะแสดงผลข้อมูลของสถานที่ที่ถูกค้นหาขึ้นมาอยู่บนสุด ซึ่งก็คือ Foreground state ส่วน Activity หน้าแรกหรือหน้าแผนที่ก็จะถูกแทนที่และสลับไปด้านหลัง ซึ่งก็คือส่วนของ Back stack
จะเห็นได้ว่าแม้ว่าหน้าแสดงผลข้อมูลที่ถูกค้นหาจะแสดงผลแทนที่หน้าแผนที่ แต่หน้าแผนที่ก็ยังคงทำงานอัปเดตสภาพจารจรอยู่ต่อเนื่องอยู่เบื้องหลัง การทำงานของ Activity Lifecycle จะมีลักษณะดังต่อไปนี้
- เมื่อ Activity ของหน้าแผนที่ได้รับคำสั่งให้ถูกแทนที่ด้วย Activity ของหน้าข้อมูลสถานที่ ทำให้ถูกเรียกใช้ onPause()
- และเมื่อถูกแทนที่ด้วย Activity ใหม่เต็มหน้าจอ ทำให้ Activity ของหน้าแรกเข้าสู่ Visible Lifetime และ onStop() ถูกเรียกใช้
และในกรณีถัดไปคือ เมื่อเรากลับกดย้อนกลับไปที่หน้า Activity แรก หรือ หน้าแผนที่อีกครั้งหนึ่งสิ่งที่จะเกิดขึ้นใน Activity Lifecycle ก็คือ
- เมื่อมีการกดย้อนกลับไปที่หน้า Activity แรกที่อยู่ในส่วนของ Back stack ขึ้นมา Foreground state อีกครั้ง onRestart() จะทำงาน เพื่อเปลี่ยนสถานะจาก onStop() เข้าสู่ onStart() ต่อไป
- และเมื่อ Activity หน้าแผนที่ถูกเรียกกลับขึ้นมาใน Foreground Lifetime แทนที่ Activity หน้าข้อมูลสถานที่จะหายไป Activity ของหน้าแผนที่จะแสดงผลบนหน้าจอแทนทำให้ onResume() ถูกเรียกใช้
- หน้าแผนที่ก็จะกลับมาแสดงผลบนหน้าจออีกครั้ง พร้อมยังอัปเดตข้อมูลแบบ Realtime อยู่
ตัวอย่างถัดไปคือ กรณีที่ผู้ใช้งานกดย่อแอปพลิเคชันเข้าสู่หน้า Home screen ของอุปกรณ์มือถือ
- เนื่องจากสิ่งที่ขึ้นมาแสดงบนหน้าจอแทนก็คือหน้า Home screen ทำให้ Activity ของ Google map เรียกใช้ onPause()
- และเรียกใช้ onStop() ตามลำดับเนื่องจากไม่ได้แสดงผลอยู่บนส่วนของหน้าจอหรือ Foreground state
สิ่งที่เกิดขึ้นคือ Activity ของ Google map ถูกย่อสลับกลับไปอยู่ใน Back stack แต่ยังคงทำงานอยู่แม้ว่าผู้ใช้งานจะอยู่ที่หน้า Home screen หรือ เปิดแอปพลิเคชันอื่น ๆ แทน
กรณีตัวอย่างสุดท้ายนั่นคือ ผู้ใช้งานปิดการทำงานของแอปพลิเคชัน แบบ End process
Activity ก็จะเรียก onDestroy() เพื่อปิดการทำงานของ Activity ลงไปเลย
แล้วเมื่อต้องการที่จะเปิดแอปพลิเคชันใหม่อีกครั้งก็จะวนกลับไปเรียกใช้ onCreate() เข้าสู่ Entire Lifetime > Visible Lifetime > Foreground Lifetime ใหม่อีกครั้งนั่นเอง
———————————
เมื่อเราเข้าใจภาพรวมของการทำงาน Activity Lifecycle แล้ว จะเห็นได้ว่ามีการแบ่งสถานะให้กับแต่ละ Activity ได้ชัดเจนว่าอยู่ในช่วงเวลาไหน ขึ้นอยู่กับว่านักพัฒนาจะเขียนให้ Activity ทำอะไร ต้องการทำงานต่อเนื่องระดับไหน สิ่งที่นักพัฒนาต้องทำความเข้าใจคือการทำงาน method ทั้ง 7 ตัว เพื่อที่จะสามารถกำหนดคำสั่งการทำงานแอปพลิเคชันได้อย่างถูกต้องในแต่ละช่วงเวลาต่าง ๆ ตามที่นักพัฒนาต้องการ
นี่เป็นเพียงส่วนหนึ่งของเนื้อหาทั้งหมด ยังมีเนื้อหาอื่น ๆ ของการพัฒนา Android app ที่น่าสนใจให้คุณสามารถเรียนรู้เต็ม ๆ เพิ่มเติมได้ภายในคอร์ส Android Series กับ Google Developers Expert ผู้คร่ำหวอดในวงการ Android เกือบ 10 ปี คุณเอก สมเกียรติ กิจวงศ์วัฒนะ – Staff Software Engineer, LINE MAN Wongnai Thailand
พิเศษตอนนี้ ซื้อเป็นแพ็กคุ้มกว่า! ประหยัดกว่าซื้อคอร์สเดี่ยวแต่ได้อัปสกิลครบทุกเรื่องของ Android สมัครเรียนเลย
ซีรีส์รวมคอร์สออนไลน์ จัดเต็ม 4 คอร์สให้คุณได้เรียนรู้การพัฒนาแอปฯ Android ที่จะช่วยให้คุณทำงานได้รวดเร็วขึ้นและมีประสิทธิภาพ สอนตั้งแต่พื้นฐานทุกเรื่องที่คุณต้องรู้ ออกแบบเนื้อหาเข้าใจง่าย ครบ จบกระบวนการ จนได้แอปฯ ขึ้นระบบ Google Play แน่นทฤษฏีควบคู่กับการปฏิบัติลงมือทำจริงตลอดบทเรียน พร้อมเสริมแนวคิดแและเทคนิคที่คุณอาจไม่เคยรู้มาก่อนของ Android Developer มืออาชีพ