ก่อนจะมาดูเรื่อง Icepick library ขอพูดถึง Instance State แบบสั้นๆ ให้ฟังก่อนนะครับ สำหรับ Instance State จะเก็บอยู่ในลักษณะ Key-Value ใน Bundle ซึ่งสามารถทำการ Save และ Restore ได้
- Save หรือ onSaveInstanceState() จะถูกเรียกเมื่อ Activity กำลังจะถูกทำลาย
- Restore หรือ onRestoreInstanceState() จะถูกเรียกเมื่อ Activity ถูกสร้างขึ้นมาใหม่อีกครั้ง
โดยปกติแล้ว Android จะทำการ Save/Restore Instance State ของ View ใน layout ของเราให้โดยอัตโนมัติ (โดยที่ View ต้องมี id)
ตัวอย่าง EditText ที่มีการกรอกข้อความไว้ เมื่อ Activity ถูกทำลายและสร้างขึ้นมาอีกครั้ง ข้อความใน EditText ก็จะกลับมาให้อัตโนมัติ (เมพ ป่ะหละ)เกริ่นไปสั้นๆ สำหรับ Instance State นะครับ ซึ่งหากต้องการรายละเอียดเพิ่มเติม แนะนำตามไปอ่านที่ Best Practices ของการ Save/Restore State ของ Activity และ Fragment ของพี่เนยได้เลยจ้า รายละเอียดพร้อมภาพประกอบเคลื่อน 3มิติ เว่อวี อลังการมาก!!
มาดูเรื่องเราของกันต่อ
การติดตั้ง
Icepick library มีการเพิ่ม repositories เข้าไปด้วยนะครับrepositories {
maven {url "https://clojars.org/repo/"}
}
หลังจากนั้นก็เพิ่ม dependencies
dependencies {
compile 'frankiesardo:icepick:3.1.0'
provided 'frankiesardo:icepick-processor:3.1.0'
}
การใช้งาน
เหมือน Save/Restore ปกติเลย เพิ่ม @State ในหน้าตัวแปรที่ต้องการ Save/Restore แค่นั้นเอง
class ExampleActivity extends Activity {
@State
String username; // จะทำการ Save/Restore ตัวแปรให้เอง
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Icepick.restoreInstanceState(this, savedInstanceState);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Icepick.saveInstanceState(this, outState);
}
}
และยังเอาไปใช้ในการ Custom View ได้อีกด้วย
class CustomView extends View {
@State
int selectedPosition;
@Override
public Parcelable onSaveInstanceState() {
return Icepick.saveInstanceState(this, super.onSaveInstanceState());
}
@Override
public void onRestoreInstanceState(Parcelable state) {
super.onRestoreInstanceState(Icepick.restoreInstanceState(this, state));
}
}
เป็นยังไงบ้างครับสำหรับ Icepick library สำหรับผมลองใช้ดูก็ทำให้รู้ว่า "ชีวิตดี๊ดี" แล้วเพื่อนๆ หละครับลองใช้แล้วเป็นยังไงกันบ้างเอาแชร์กันได้ใน Comment นะครับ สวัสดีครับ
ลิงค์อ้างอิง
Github : Icepick : Android Instance State made easynovoda.com : THE MAKING OF ICEPICK: THE GOOD, THE BAD AND THE UGLY
developer.android.com : Recreating an Activity
inthecheesefactory.com : Best Practices ของการ Save/Restore State ของ Activity และ Fragment
trickyandroid.com : Saving Android View state correctly