หลังจากที่แอปเปิลได้เปิดตัว iPhone OS4 เมื่อเดือนที่ผ่านมา ความสามารถใหม่ที่โดดเด่นที่สุดและเป็นสิ่งที่ผู้ใช้ไอโฟนรอคอยมานาน นั่นก็คือการทำ Multitasking นั่นเอง ซึ่งแอปเปิลได้คุยไว้ว่า วิธีการทำ Multitasking ในแบบไอโฟนนั้น ทั้งประหยัดแบตเตอรี่และไม่ทำให้เครื่องช้าลงแต่อย่างใด
หลังจากที่ผมได้ทำการศึกษา Multitasking ในแบบของแอปเปิลโดยละเอียดมากขึ้น ก็พบว่าแนวทางและวิธีการที่แอปเปิลเลือกใช้นั้น นอกจากจะมีเรื่องราวของที่มาที่ไป การแก้ปัญหาต่างๆ แล้ว ยังมีความน่าสนใจในเชิง Software Engineer อีกหลายๆ ด้านอีกด้วย
คำเตือน : บทความนี้เป็นบทความในเชิงเทคนิค
iPhone OS 1 - 3
ในปัจจุบัน เป็นที่รู้กันว่า โปรแกรมในไอโฟนนั้นไม่สามารถทำงานหลายตัวพร้อมกันได้ หากเราต้องการเปิดโปรแกรมหนึ่ง จะต้องทำการปิดอีกโปรแกรมหนึ่ง (ไม่นับโปรแกรมที่แอปเปิลเขียนเอง อย่างการเล่นเพลง หรือการรับสายโทรศัพท์)
- โปรแกรมมีเพียง 2 State คือ Active กับ Not Running (เปิดกับปิด)
- เมื่อเรากดเปิดโปรแกรม ข้อมูลทุกอย่างจะถูกเก็บอยู่ในแรม (Ram, Memory) เช่นเดียวกับโปรแกรมในคอมพิวเตอร์
- หลังจากที่เรากดปุ่ม home โปรแกรมที่ถูกปิดจะมีเวลา 5 วินาที ในการเก็บข้อมูลต่างๆ ก่อนที่จะถูกโยนทิ้งออกไปจากแรม
- ซึ่งโปรแกรมส่วนใหญ่ก็จะใช้เวลา 5 วินาทีนั้น save ข้อมูลที่จำเป็น เช่น เล่นเกมส์ถึงด่านไหนแล้ว หน้าจอตอนนี้อยู่ที่หน้าไหน หรือเราพิมพ์อะไรค้างไว้ล่าสุด
- 5 วินาที นั้นเร็วมาก ดังนั้นไม่มีทางเลยที่จะเก็บข้่อมูลไปลง server เช่นถ้าเรา upload รูปใน flickr อยู่แล้วกดปิดโปรแกรม ระบบทุกอย่างก็จะปิดไปเลย
- ถ้ากดเปิดโปรแกรมขึ้นมาใหม่ มันจะเริ่มโหลดโปรแกรมทุกอย่างตั้งแต่ต้น เพราะโปรแกรมถูกเอาออกจากแรมไปแล้ว
- โปรแกรมที่เปิดเสร็จ ก็จะใช้ข้อมูลใน local database เพื่อจำว่าเราเล่นเกมส์มาถึงไหนแล้ว, พิมพ์อะไรค้างไว้รึเปล่า, ไฟล์ที่ upload เมื่อกี้ไม่สำเร็จนะ จะทำการ upload ใหม่หรือไม่
ตัวอย่างการจัดเก็บโปรแกรมในแรมของ iPhone OS 1-3
เนื่องจากระบบมี state ให้เพียงแค่ เปิดและปิด ทำให้เราสามารถใช้งานโปรแกรมได้เพียงแค่ 1 โปรแกรมเท่านั้น จึงเป็นจุดอ่อนสำคัญของไอโฟน เพราะนอกจากทำงานได้ทีละโปรแกรมแล้ว การเปิด-ปิดโปรแกรมใหม่ต้องใช้เวลาในการโหลดทุกอย่างตั้งแต่เริ่มต้นใหม่ทุกครั้ง ทำให้เสียเวลา
ปัจจุบันนักพัฒนาต้องเก็บข้อมูลบางส่วนใน local database
iPhone OS 4
Multitasking คือการที่เราสามารถใช้งานโปรแกรมหลายโปรแกรม ในเวลาเดียวกันได้ แต่มีข้อเสียหลายอย่าง คือมันจะทำให้เครื่องทำงานช้าลง และกินแบตเตอรี่ โดยปกติแล้วเราไม่ค่อยเจอปัญหานี้เวลาใช้คอมพิวเตอร์เพราะเสียบปลั๊กไฟไว้ตลอดเวลา แต่บนโทรศัพท์มือถือที่แบตเตอรี่น้อย นี่คือปัญหาใหญ่
เนื่องจากแอปเปิลเป็นบริษัทที่ออกจะยึดติดกับประสบการณ์ของผู้ใช้มากเป็นพิเศษ (อะไรก็ตามที่สตีฟ จ๊อบส์ใช้แล้วรู้สึกหงุดหงิด จะต้องปรับปรุงด่วน) แอปเปิลจึงเลี่ยงวิธีทำ multitasking แบบทั่วไปที่ให้โปรแกรมทำงานได้เต็มที่ทั้งหมด 100% มาเป็นจำกัดให้โปรแกรมทำงานได้แค่บางอย่างเท่านั้น
โปรแกรมแช่แข็ง
จะขออธิบายการทำงานแบบใหม่ของ iPhone OS4 อย่างง่ายดังนี้
- เมื่อผู้ใช้ปิดโปรแกรม ข้อมูลทั้งหมดของโปรแกรมจะยังคงเก็บเอาไว้ในแรม ไม่ลบออกทั้งหมดแบบแต่ก่อน
- โปรแกรมที่ถูกเก็บอยู่ในแรม จะไม่สามารถทำงานอะไรได้เลย เรียกอีกอย่างว่าถูกแช่แข็ง
- ทีนี้ถ้าเรากดเปิดโปรแกรมอีกครั้ง โปรแกรมก็จะทำงานต่อได้เลย เพราะโปรแกรมยังอยู่ในแรม ทำให้ไม่ต้องเสียเวลาโหลดทุกอย่างเข้ามาในแรมตอนเปิดโปรแกรมเหมือนสมัยก่อน
- แน่นอนว่าแรมมีจำนวนจำกัด เพราะงั้นเมื่อแรมที่มีอยู่ใกล้จะเต็ม โปรแกรมที่อยู่ในแรมมานานที่สุดจะถูกโยนออกจากแรมโดยอัตโนมัติ (ลักษณะคล้ายกับ Garbage Collection ในจาวา)
- ถ้าเราเปิดโปรแกรมที่ถูกโยนออกไปจากแรมแล้ว โปรแกรมนั้นจะต้องโหลดใหม่ตั้งแต่แรกเหมือนสมัยก่อน
- โปรแกรมที่ถูกแช่แข็ง แอปเปิลจะยอมให้ทำงานได้แค่ 7 อย่างที่แอปเปิลกำหนดไว้เท่านั้น
- เมื่อทำงานที่กำหนดไว้เสร็จ โปรแกรมก็จะถูกแช่แข็งโดยสมบูรณ์ ไม่สามารถทำงานอะไรได้อีก
วิธีแช่แข็งโปรแกรมนี้ ทำให้การทำงานของ cpu และการใช้แบตเตอรี่แทบจะเป็นศูนย์ ซึ่งการจะทำวิธีแบบนี้ได้นั้นจะต้องมีอุปกรณ์ที่มีขนาดของแรมมากพอ จึงเป็นสาเหตุที่แอปเปิลต้องยอมตัด multitasking ออกจากไอโฟน 3G (ไอโฟนรุ่น 3G มีแรม 128 MB ส่วนรุ่น 3GS มีแรม 256 MB)
Multitasking
เรามาดูรายละเอียดที่ลึกขึ้นจากเดิม ว่าการทำงาน Multitasking แบบไอโฟนนั้นทำงานอย่างไร
- จากเดิมที่โปรแกรมมี State เพียงแค่เปิดกับปิด
- เพิ่ม State ใหม่เข้ามา 2 ตัว คือ Background และ Suspended
- Background คือโปรแกรมยังอยู่ในแรม ทำงานได้เพียงบริการบางอย่างที่แอปเปิลกำหนด
- Suspended คือโปรแกรมยังอยู่ในแรม แต่ไม่สามารถทำงานใดๆ ได้อีก (ถูกแช่แข็ง)
- ถ้าไล่ State จากการกดปิดโปรแกรมที่ทำงานอยู่ จะมี State ดังนี้ : Active -> Background -> Suspended -> Not Running
- ขั้นแรก เมื่อผู้ใช้ทำการปิดโปรแกรม (กดปุ่ม home) โปรแกรมจะย้ายจาก Active ไปอยู่ใน Background State
- ใน Background State จะมีบริการให้ใช้อยู่ 7 อย่าง เช่น เล่นเพลง, คุยโทรศัพท์ผ่าน VoIP, เรียกขอที่อยู่ในปัจจุบัน (GPS), ทำงานย่อยอย่าง save ไฟล์ หรือ upload รูปให้เสร็จ
- เมื่อโปรแกรมทำงานเหล่านี้จนเสร็จแล้ว โปรแกรมจะถูกย้ายไปอยู่ใน Suspended State
- โปรแกรมที่อยู่ใน Suspended State นั้น พร้อมที่จะถูกเปิดอยู่ตลอดเวลา
- โปรแกรมจะอยู่ใน Suspended State ไปจนกว่าระบบจะเข้ามาลบไปเอง เช่น แรมใกล้เต็ม หรือโปรแกรมนี้ถูกปิดมานานมากแล้ว
- ที่เก๋คือ เวลาเรากดปิดโปรแกรม ระบบจะ Capture หน้าจอโปรแกรมของเราไว้ เพื่อเวลาเราเปิดโปรแกรมขึ้นมาอีกครั้ง ระบบจะแสดงรูปดังกล่าวเพื่อหลอกตาผู้ใช้ชั่วคราวระหว่างที่รอการประมวลผลเบื้องหลัง หรืออาจจะทำเป็นหน้าจอนับถอยหลัง 3 2 1 แบบเกมส์ Tap Tap Revenge ที่จ๊อบส์เดโมก็ได้ครับ
ตัวอย่าง State และข้อมูลในแรมของ iPhone OS 4
เพื่อให้เห็นภาพมากขึ้น ขอยกตัวอย่างโปรแกรมฟังเพลงบนอินเทอร์เน็ตอย่าง Pandora เมื่อเราเปิดฟังเพลงอยู่แล้วกดปิดโปรแกรมลง ระบบจะเปลี่ยนสถานะเข้าไปอยู่ใน Background State และร้องขอใช้บริการ Background Audio Service ทำให้โปรแกรมยังคงเล่นเพลงได้ต่อไป แต่จะไม่สามารถทำงานอย่างอื่นได้เลย เช่นถ้าเพลงเปลี่ยนไป จะไม่มีการเปลี่ยนรูปอัลบั้ม
เมื่อเรากดหยุดเล่นเพลง หรือเพลงเล่นจนหมด playlist โปรแกรมจะถูกย้ายไปอยู่ Suspended State ซึ่งจะโดนแช่แข็งไปอย่างงั้น จนกว่าระบบจะเข้ามาเคลียร์ออกจากแรมเอง
ข้อควรรู้
- เราไม่สามารถสั่งปิดโปรแกรมที่อยู่ใน Suspended State เองได้ ถ้าจะให้เรียกง่ายๆ ก็คือไม่มี task manager ในไอโฟนนั่นเอง
- การที่แอปเปิลไม่อนุญาตให้โปรแกรมที่ถูกแช่แข็งทำงานอะไรได้เลย ทำให้มีปัญหาอีกร้อยแปดตามมา เช่น ถ้าเราปิดโปรแกรมตอนเครื่องวางในแนวตั้ง แต่เปิดโปรแกรมอีกครั้งในแนวนอน ระบบควรแสดงผลอย่างไร ? หรือถ้าเราเข้าไปเปลี่ยนภาษาของเครื่อง, แก้ setting บางอย่างของโปรแกรม เราจะจัดการกับเรื่องนี้อย่างไร ?
- แอปเปิลแก้ปัญหาเหล่านี้ ด้วยการที่ระบบจะจำสภาพแวดล้อมต่างๆ ในจังหวะที่โปรแกรมถูกปิด และจะส่งเข้ามาให้ตอนโปรแกรมถูกเปิด เช่น วางเครื่องแนวตั้ง แนวนอน, ภาษา, วันเวลา รวมถึงค่า setting ต่างๆ
- โปรแกรมที่ไปอยู่ใน Background State แล้วดันเขียนโค้ดเพื่อไปเรียกสิ่งที่ไม่ควรเรียก อย่างเช่น สั่งแสดงภาพ 3 มิติด้วย OpenGL โปรแกรมนั้นจะถูกระบบสั่งปิดแบบถาวรโดยอัตโนมัติ
- โปรแกรมที่ทำงานแบบ Background State นานเกินไป ก็จะถูกปิดแบบถาวรโดยอัตโนมัติเช่นกัน
โดยสรุปแล้ว คนที่จะเหนื่อยที่สุดคือโปรแกรมเมอร์ทั้งหลาย ที่จะต้องคำนึงถึงเรื่องสถานะการเปิดปิดของโปรแกรมเพิ่มเติม แต่ถ้าโปรแกรมไหนที่ไม่ต้องการใช้ Background Service เหล่านี้ ก็สามารถเขียนโปรแกรมให้มีแค่เปิด-ปิดแบบดั้งเดิมได้ โดยไม่ต้องแก้โค้ดเดิมแต่อย่างใด
สรุป
ส่วนตัวแล้วผมรู้สึกชื่นชมกับการเลือกเส้นทางนี้ของแอปเปิลมาก ที่ยอมให้คนเขียนโปรแกรมเหนื่อยเพิ่ม แต่ผู้ใช้ได้ประโยชน์ไปเต็มๆ สิ่งที่น่าห่วงคือแอปเปิลจะต้องทำงานอย่างหนักในการทำความเข้าใจกับนักพัฒนา และต้องดูแลการจัดการโปรแกรมที่ไม่ใช้ทั้งหลายให้ดี เชื่อว่าแอปเปิลคงจะต้องเพิ่มขนาดของแรมในไอโฟนให้มากขึ้น และเพิ่มจำนวน background service ในอนาคต
คงต้องใช้เวลาสักพักเพื่อพิสูจน์ว่า แนวทาง Multitasking แบบแอปเปิล กับผู้ผลิตโทรศัพท์มือถือรายอื่นๆ ใครจะเป็นผู้ชนะที่แท้จริง
ที่มา - Khajochi's Blog
Comments
เห็นไอ้ตัวนี้ นึกว่าจ่าพิชิตมา Review ให้
อ่านแล้วได้ความรู้..ขอบคุณสำหรับรีวิว ครับ
Thx u very much. U r the man!
อ่านแล้ว เข้าใจ ขึ้นมามากๆเลยครับ
ขอบคุณครับ..
:: DigiKin8 ::
เพิ่งเข้าใจอ่ะครับ
สูงชั้นจริงๆ หุหุ (โปรแกรมเมอร์สู้ๆ)
Thank you for useful review!
แจ่มมาก ขอบคุณสำหรับข้อมูลครับ
"โปรแกรมเมอร์ มีหน้าที่เขียนโปรแกรม เพราะฉะนั้นต้องทำหน้าที่ให้ดีที่สุด ไม่ใช่ปล่อยให้ผู้ใช้ปวดหัว อย่างต้องไล่ปิดโปรแกรมใน task manager เอง"
ขอบคุณครับ เป็นรีวิวที่อ่านและเข้าใจได้ง่ายดีครับ
จะเอาเงินผู้ใช้ก็กรุณาออกแรงหน่อยทั้ง apple ทั้งคนเขียนโปรแกรม
ผมชอบแนวที่ apple เลือกจะไม่ให้อิสระกับผู้ใช้กับโปรแกรมเมอร์มากเกินไปกว่าสิ่งพวกเขาต้องใช้ในปัจจุบัน เพราะนิสัยไม่รู้จักพอของมนุษย์นี้ละน่ากลัวที่สุด
มองในมุมนี้ก็ถูกอีก ยกตัวอย่างเกมบนฝั่งพีซีนี่กินสเปกโคตรๆ แรงเท่าไหร่ไม่เคยพอ ต้องอัพใหม่เรื่อยๆ -*-
เพื่อความสมจริงก็ลงทุนกันหน่อย :P
เห็นด้วยเลยครับ
อ่านแล้วนึกถึงตอนทำงาน
ไม่ว่าเราจะต้องทำงานหนักแค่ไหนก็ตาม ถ้าคนใช้ได้ประสบการณ์การใช้งานที่ดี
ยังไงก็คุ้มค่า
++
ขอบคุณครับ
แต่ว่าอย่างนี้ก็เท่ากับว่า ถ้าอยู่ใน suspended state ก็ควรจะบันทึกทุกอย่างลง Local Storage แล้วใช่ไหมครับ เพื่อที่เตรียมการโดนปิด :D
บล็อกของผม: http://sikachu.com
สงสัยเหมือนกันเลย
คิดว่าทุกอย่างควรจะถูก save ตั้งแต่ออกจาก state active แล้วครับ
ตอนโปรแกรมเปลี่ยนจาก active ไปเป็น background จะมีเวลาให้ save ทุกอย่าง 5 วินาทีเช่นเดิมครับ :)
แฟนพันธุ์แท้สตีฟจ็อบส์ | MacThai.com
รอดูกันไป ;)
my blog
ผมเคยอ่านมาบ้างนะแต่ ที่เรียบเรียบเรียงมา
ต้องบอกว่าทำให้เข้าใจง่ายขึ้นมาก ขอบคุณมากครับ
ชอบตอนน้ำตาไหล ๕๕๕
อยากให้ขยายความ ของคำว่า ''นานเกินไป '' หน่อยครับ
คือใช้เวลาเท่าไหร่จึงเรียกว่านานเกินไปในการปิด process นั้นๆ จุกจิกหรือเปล่านะ แฮะๆ
ขอบคุณสำหรับรีวิวครับ ^^
ตามเอกสารของแอปเปิลไม่ได้ระบุตัวเลขที่แน่นอนครับ แต่จะมี method ให้เราสามารถเรียกดูได้เหมือนกันว่าโปรแกรมเหลือเวลาอีกเท่าไหร่ (ชื่อ backgroundTimeRemaining) เข้าใจว่าอาจจะเอาเรื่องของแบตเตอรีที่เหลือมาคำนวณเข้าไปด้วย
แฟนพันธุ์แท้สตีฟจ็อบส์ | MacThai.com
อ่านเข้าใจง่ายมาก... ยอดเยี่ยม
ขอบคุณมากครับ
อคติทำให้คนรับเหตุผลด้านเดียว
ลักษณะเหมือนใน Windows Mobile
แต่รายนั้น มันมักจะมีแรมหายไปกลางอากาศ :P
นอกจากนี้บรรทัดที่ quote มา สุด ยังมีสระเกินด้วยครับ
แก้แล้วครับ ขอบคุณครับ :)
แฟนพันธุ์แท้สตีฟจ็อบส์ | MacThai.com
อยากรู้ตัวเลขเหมือนกันว่ากี่นาที/ชั่วโมง ??
เขียนได้ดีครับ
ปล. Tap Tap Revenge นะครับ ไม่ใช่ Tab Tab Revolution
Pitawat's Blog :: บล็อกผมเองครับ
แก้แล้วครับ ขอบคุณครับ :)
แฟนพันธุ์แท้สตีฟจ็อบส์ | MacThai.com
Tap Tap ด้วยครับ ไม่ใช่ Tab Tab
จุกจิกนิดนึงนะ :)
Pitawat's Blog :: บล็อกผมเองครับ
สงสัยตอนเขียนนึกถีง Dance Dance Revolution แน่ๆ เลย อิอิ
เห็นเขียนข้างต้นว่า เป็นบทความเชิงเทคนิค คิดว่าอ่านยากมาก
แต่อ่านเข้าใจง่ายมากเลยครับ หรือ เป็นเพราะศาสดา ทำให้มันง่าย หรือเปล่าเนาะ
ตอนนี้ผมใช้ N900 อยู่ ซึ่งเข้าใจว่าเป็น multitasking แท้ ๆ พอใช้งานจริง ๆ แบตหายไปกว่า 20% ใน 1 ชั่วโมง ผมว่าไม่ work เลย แนวทางของ apple น่าจะ work นะครับผมว่า
ผมว่า OS ทั่วไปที่ทำ multitasking แบบนี้
ก็ให้ programmer เขียนโปรแกรมใหม่โดยใช้เทคนิคแบบ iPhone 4.0 ก็ทำงานได้เช่นกัน จริงไหมครับ?
multitasking แท้ๆแล้วไม่จำเป็นว่าแบตต้องหมดไวนะ
ลองใช้ blackberry 9700 ดูครับ
โอ้ ขอบคุณสำหรับเนื้อหาครับ กำลังตัดสินใจไปเล่นตลาด iPhone พอดีเลย
ปล จากรูปนี้ผมรู้ว่าคุณพวกเดียวกับผม ฮ่าๆ ไม่เกี่ยวกับรีวิวเลย
พวกแดงล้มเจ้า?
น้องซาบซึ้ง เห็นบ่อยที่ดว็บดราม่า
หึยยย พวกเสพติดดราม่า
ขอบคุณสำหรับบทความดีๆ ครับ
ใครมีบทความเรื่อง Multitasking ของ Android มั่งครับ อยากเอามาเปรียบเทียบกัน
มีอันนี้ครับ อยู่บน official Android Developer Blog แต่ผมยังไม่มีเวลาอ่านละเอียด Multitasking the Android Way
ผมว่ามันก็ทำงานคล้าย ๆ กันครับ คือแบ่งเป็น State คล้าย ๆ กัน
โปรแกรมไหนที่จำศีลนานไป จะเสียชีวิตไปเนื่องจากขาดอากาศไปเอง อันนี้ก็คล้ายกันเช่นกัน
ผมว่าเป็นโมเดลที่ใช้ได้นะ ยกเว้นแต่จะมี Process ดื้อด้านไม่ยอมตาย อันนี้คงคุมลำบากหน่อย
ขอบคุณสำหรับข้อมูลนะครับ!! ไม่ทราบว่าเนื้อหานี้เรียบเรียงจากการทดสอบ OS 4.0 ด้วยตัวเองหรือว่าแปลมาครับ??
อย่างไรก็แล้วแล้วแต่.. ผมขออนุญาติพูดถึงเนื้อหาในบางประเด็นนะครับ ถ้าผิดถูกอย่างไรก็ขออภัยด้วยครับ..
ช่วงที่บอกว่า "เราไม่สามารถสั่งปิดโปรแกรมที่อยู่ใน Suspended State เองได้ ถ้าจะให้เรียกง่ายๆ ก็คือไม่มี task manager ในไอโฟนนั่นเอง"
ผมคิดว่าปิดได้นะครับ.. ในขั้นตอนการแสดงไอคอนของโปรแกรมที่ทำงานอยู่.. (น่าจะเรียกว่า Exposé ได้นะ) กดที่ไอคอนของโปรแกรมที่แสดงไว้ด้านล่างค้างไว้ ก็จะมีเครื่องหมายปิดหรือกากบาทโผล่มาให้เลือกปิดโปรแกรมที่ไม่ต้องการได้ครับ..
อีกอย่างเกมส์ Tap Tap เวลาหยุดเกมส์ไว้ และจะทำการเล่นต่ออีกคร้ง ก็จะมีการนับถอยหลัง 3 2 1 เป็นปกติทุกครั้งอยู่แล้วนะครับ เพื่อเป็นการให้ผู้เล่นเตรียมพร้อมและจับจังหวะเพลงที่กำลังเล่นต่อจากที่เล่นค้างเอาไว้ได้ครับ
ซึ่งคิดว่าไม่น่าจะเกี่ยวกับที่บอกว่า ระบบจะ Capture หน้าจอโปรแกรมของเราไว้นะครับ ..
..
ยังไงก็ขอขอบคุณอีกครั้งครับผม..
ว้าว เยี่ยมไปเลยครับ ขอบคุณสำหรับคำแนะนำครับ
เขียนเอง+อ่านจากหลายๆ ที่ครับ เลยอาจดูแปลกๆ อยู่บ้าง ^^"
เท่าที่ผมลองมันก็ปิดได้อย่างที่คุณ snowman บอกครับ แต่ก็ยังเป็นที่ถกเถียงกันอยู่ครับว่าปิดจริงหรือเปล่า(ตาม forum dev) เพราะบางคนเขียน debug ไว้แต่กดปิดแล้วไม่ยอมปิด (bug?) และที่สำคัญคือในเอกสารของแอปเปิลไม่ยอมบอกไว้ว่าปิดจริงหรือเปล่า
อืม .. ถ้าทำให้สับสนขอเปลี่ยนข้อความแล้วกันนะครับ
ประเด็นคือ ถ้าโปรแกรมที่เรียกกราฟฟิค เสียง และภาพ เวลาที่เปลี่ยนจาก suspended ไปเป็น active จะต้องเสียเวลาประมาณ 0.5 - 2 วินาทีเพื่อประมวลผลก่อนเล่นได้จริง แอปเปิลจึงแนะนำให้ทำหน้า loading screen ขึ้นมาครับ โดยอาจจะใช้ snap shot ก่อนปิดโปรแกรมได้
แฟนพันธุ์แท้สตีฟจ็อบส์ | MacThai.com
ขอบคุณมากครับผม..
โอ้ๆๆๆ ขอบคุณมากเรยครับเก็ตมากขึ้นหุหุ
ชอบแนวทางของ multitask ของ iPhone นะ
ตอน 3.0 บ่นว่ามันกินแบต 4.0 เลยหาวิธีที่มันไม่กินแบตจนได้ นับถือจริงๆ
อยากให้อธิบาย API ของ App Fast Switching ด้วยจังเลยครับ
ปล.เรื่องของ 3 2 1 ของ Tap Tap นี่มีมานานแล้วครับ เอาไว้ให้เวลาเข้าเกมจะได้จับจังหวะก่อนเล่นต่อ
ขอบคุณครับ
อ่านแล้วเข้าใจ Multitaking ในแบบ Apple ได้ดียิ่งขึ้น
น่าทึ่งวิธีการคิดจริงๆ แต่ไม่รู้ว่าจะเป็นการเพิ่มงานหนักในนักพัฒนาโปรแกรมมากหรือเปล่า?
แต่ผมว่ามันก็เป็นวิธีบริหาร จัดการทรัพยากรที่มีอยู่อย่างจำกัดได้อย่างดี ยิ่งบนอุปกรณ์แบบนี้ด้วยแล้ว
ปล. จริงๆ อาจจะเพราะว่า Batt iPhone อยู่ไม่ทนด้วยแหละ เค้าถึงต้องหาวิธีการแบบนี้
ผมเข้าใจว่าหลักการมันคล้ายๆกับ Android รึเปล่าครับ เพราะ Android จะดีดโปรแกรมทิ้งก็ต่อเมื่อมันไม่ทำงานแล้ว หรือเปิดไว้เป็นเวลานานแล้วไม่มีอะไรทำงานเป็น Background
จุดไม่เหมือนคือมันจำกัดรูปแบบงานที่ทำได้เมื่ออยู่ด้านหลัง
ส่วน Android ผมเห็นอยากทำอะไรก็ทำได้นะครับ
lewcpe.com, @wasonliw
และคล้ายกับ Windows Phone 7 ด้วยหรือเปล่า (ถ้าผมจำไม่ผิด)
Jusci - Google Plus - Twitter
ซาบซึ้งที่รีวิวให้มากครับ
เจ๋งอะ ขอบคุณนะครับ เขียนได้เข้าใจง่ายมากๆ เลยครับ
Pawoot.com
ผมเกลียดตัวซาบซึ้งครับ
+1
สเปรดซาบซึ้งรึนี่ -*-
เขียนได้ดี เขียนได้ถูกต้อง
Android user อย่างผมอ่านแล้วซาบซึ้งมากครับ
pittaya.com
เดี๋ยวต่อไปจะมีการเลียนแบบ Multitaking แบบนี้ เพราะมันดีมากสำหรับระบบที่ต้องการประหยัดพลังงาน
และเป็นมิตรต่อผู้ใช้
นี่คือตัวอย่างที่ดีของ Embeded / Realtime Syetem Design
ซึ่งต้องมุ่งเน้นไปยัง Software State เป็นสำคัญ
สรุปการแก้ปัญหาเรื่อง Multitasking ของแอปเปิลคือ
แก้จาก Stateless --> Stateful
เป็นรีวิว ที่...ซาบซิ้ง...มากครับ
ขอบคุณมากสำหรับบทความนี้นะครับ ทำให้ user เข้าใจถึงหลักการทำงานของ Software เบื้องหลังได้ดีขึ้นมาก ๆ
เขียนดีขนาดนี้ ตัด คำเตือน : บทความนี้เป็นบทความในเชิงเทคนิค ได้เลยหละครับ ^^
@ Virusfowl
I'm not a dev. not yet a user.
อ่านแล้วเข้าใจมากครับ
ไปอธิบายให้คนอื่นฟังต่อได้อีก เท่ไม่หยอก
ละเอียดยิบเลยครับ ขอบคุณมาก
อ่านแล้วน้ำตาเล็ด รู้สึกสำนึกในความกรุณา 7 ประการ
ซาบซึ้งจริงๆ ขอบคุณครับ TvT
ปล จริงๆ การจัดการหน่วยความจำแบบ GC ของ Java น่าจะทำได้ตั้งแต่ iPhone OS รุ่นก่อนๆแล้วนะ มันเกี่ยวกับ multitasking ใน เวอร์ชั่น 4 นิดหน่อยเอง
{$user} was not an Imposter
เขียนดีมากๆเลยครับ อ่านง่าย+เข้าใจ
+1 ขอบคุณมากคับ ดูตั้งใจเรียบเรียงและพยายามเขียนให้เข้าใจง่ายที่สุดเท่าที่จะทำได้มากคับ สู้ต่อไปคับ