Android Architecture Components EP 1: Handling Lifecycles

JongzazaaL
Aug 22, 2017 · 1 min read

นี่เป็นบทความแรกอาจมีข้อผิดพลาดบ้าง ขอน้อมรับความผิดแล้วจะกลับไปแก้ทีหลังครับ

ในช่วงที่ผ่านมา เจ้าของบล็อคได้ยินคำว่า Architecture Components บ่อยซะเหลือเกิน เลยไปตามอ่านตามที่ต่างๆ แต่ครั้นจะอ่านอย่างเดียวมันก็ช่างไม่เข้าใจเสียนี่กระไร เลยจำเป็นต้องลงมาเล่นกับโค๊ตจริงๆ ถึงจะพอเข้าใจมากขึ้น

จากที่ลองเล่นคลุกคลีอยู่หลายวัน ก็เลยปิ๊งไอเดียขึ้นมาว่า มันคือตัวช่วยให้นักพัฒนาออกแบบได้ง่ายขึ้น การดูแลรักษาก็ง๊ายแสนง่ายไม่วุ่นวายมากกกก ซึ่ง ไอ Architecture Components เนี่ยแบ่งออกได้เป็น 4 กลุ่มก็คือออออ

วันนี้ เลยจะขอพูดถึงแค่ Handling Lifecycles ก่อนล่ะกัน

Handling Lifecycles

เชื่อว่า นักพัฒนาหลายๆคนคุ้นเคยคำนี้ดี และคงประสบปัญหาเหมือนกันคือ ใน Activity หรือ Fragment ช่างมี onStart, onStop, onDestroy บราๆๆ อยู่เต็มไปหมด การจะ จัดการมันช่างวุ่นวายซะเหลือเกิน มันจะดีมากถ้าสามารถจัดไว้ก่อน พอจะใช้ก็เรียกง่ายๆ ไม่ต้องวุ่นวาย แต่เอ๊ะ ใครว่าทำไม่ได้ล่ะ ทาง Google เขาเตรียมมาให้เรียบร้อยแล้ว ว้าวววว

https://developer.android.com/topic/libraries/architecture/adding-components.html

เอาล่ะเริ่มกันเลยดีกว่า อันดับแรกให้เราสร้าง Project ใหม่ขึ้นมาอันหนึ่ง

เปิด build.gradle (project) แล้วใส่ตามนี้

allprojects {
repositories {
jcenter()
maven { url 'https://maven.google.com' }
}
}

เปิด build.gradle (app) แล้วใส่ตามนี้

compile "android.arch.lifecycle:runtime:1.0.0-alpha9"
compile "android.arch.lifecycle:extensions:1.0.0-alpha9"
annotationProcessor "android.arch.lifecycle:compiler:1.0.0-alpha9"

ให้ทำการสร้าง class มาหนึ่งอัน จากนั้นให้ทำการ
- implements LifecycleObserve
- สร้าง constructor รับ class Lifecycle
- ใช้คำสั่ง addObserver

ซึ่งจะทำให้ class MyLocation สามารถดัก Lifecycle มาใช้งานได้แล้ว

ถ้าอยากจะดักว่า ให้ทำบางอย่างใน Lifecycle ไหน ก็ให้ทำการประกาศผ่าน Annotation แบบนี้

เมื่อใช้งานเสร็จแล้ว ก็ลบคลาสนี้ออกจาก Observer ได้เลย

กลับมาที่ MainActivity ให้ทำการ extends LifecycleActivity เรียก class MyLocation ได้เลย

แล้วถ้าอยากได้แบบ Fragment ล่ะ? ก็เปลี่ยนเป็น extends จาก LifecycleFragment ได้เลย

ถ้า ไม่อยาก extends หละ ต้องทำยังไง? เราสามารถ Implementมาใช้ได้เลยตามนี้

แต่สำหรับ Fragment ต้องเพิ่มอีกนิดหน่อย(ถ้าไม่ได้ใช้Fragment แบบ support.v4 นะถ้าใช้ก็ข้ามไปเลย)

จากที่ลองมาถ้าเราไม่ใส่ มันก็จะไม่ทำงานเลยซักอัน แถมถ้าไม่ใส่ onStart แต่ใส่แค่ที่ onStop ตัวonStopมันก็ไม่ทำงานเช่นกัน ==; แนะนำว่าใสๆทุกอันที่ใช้ล่ะกัน

แล้วประโยชน์มันคือไรล่ะ? หลังจากที่ได้ลองเจ้าของบล็อคก็รู้สึกมันช่วยได้มากเลยในกรณีที่ ถ้าต้องเขียนไรซักอย่าง เช่น เจ้าของบล็อคอยากจะทำ LocationListener แต่ว่าต้องมาคอยดักให้มันเริ่มมันหยุดตอนไหนบ้าง แล้วต้องมาคอยเช็คที่ Lifecycles ตลอด ยิ่งถ้าใช้หลายที่ ยิ่งวุ่นวายไปกันใหญ่ ถ้าเกิดว่าเจ้าของบล็อคจัดการให้เสร็จในคลาสเดียว ถึงเวลาใช้ก็แค่ ไปเรียกคลาสนั้น จบปิ๊ง ง่ายใช่ไหมล่ะ

ขอขอบคุณข้อมูลดีๆจาก
http://www.akexorcist.com
https://medium.com/@pondthaitay
https://developer.android.com

)
Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade