หลังจากที่แอปเปิลได้เปิดตัว 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 ใหม่หรือไม่
เนื่องจากระบบมี state ให้เพียงแค่ เปิดและปิด ทำให้เราสามารถใช้งานโปรแกรมได้เพียงแค่ 1 โปรแกรมเท่านั้น จึงเป็นจุดอ่อนสำคัญของไอโฟน เพราะนอกจากทำงานได้ทีละโปรแกรมแล้ว การเปิด-ปิดโปรแกรมใหม่ต้องใช้เวลาในการโหลดทุกอย่างตั้งแต่เริ่มต้นใหม่ทุกครั้ง ทำให้เสียเวลา
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 ที่จ๊อบส์เดโมก็ได้ครับ
เพื่อให้เห็นภาพมากขึ้น ขอยกตัวอย่างโปรแกรมฟังเพลงบนอินเทอร์เน็ตอย่าง 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
เห็นไอ้ตัวนี้
Perl Sun, 05/02/2010 - 17:37
เห็นไอ้ตัวนี้
นึกว่าจ่าพิชิตมา Review ให้
อ่านแล้วได้ความรู้..ขอบคุณสำห
aoddy Sun, 05/02/2010 - 17:46
อ่านแล้วได้ความรู้..ขอบคุณสำหรับรีวิว ครับ
Thx u very much. U r the man!
dafty Sun, 05/02/2010 - 17:47
Thx u very much. U r the man!
อ่านแล้ว เข้าใจ
xredzanakub Sun, 05/02/2010 - 17:57
อ่านแล้ว เข้าใจ ขึ้นมามากๆเลยครับ
ขอบคุณครับ..
PiKO Sun, 05/02/2010 - 18:00
ขอบคุณครับ..
เพิ่งเข้าใจอ่ะครับ สูงชั้นจริ
GuBaRaK Sun, 05/02/2010 - 18:01
เพิ่งเข้าใจอ่ะครับ
สูงชั้นจริงๆ หุหุ (โปรแกรมเมอร์สู้ๆ)
Thank you for useful review!
mcimike Sun, 05/02/2010 - 18:09
Thank you for useful review!
แจ่มมาก
Eka-X Sun, 05/02/2010 - 18:11
แจ่มมาก ขอบคุณสำหรับข้อมูลครับ
"โปรแกรมเมอร์ มีหน้าที่เขียนโปรแกรม เพราะฉะนั้นต้องทำหน้าที่ให้ดีที่สุด ไม่ใช่ปล่อยให้ผู้ใช้ปวดหัว อย่างต้องไล่ปิดโปรแกรมใน task manager เอง"
ขอบคุณครับ
naritai Sun, 05/02/2010 - 18:19
ขอบคุณครับ เป็นรีวิวที่อ่านและเข้าใจได้ง่ายดีครับ
จะเอาเงินผู้ใช้ก็กรุณาออกแรงห
animateex Sun, 05/02/2010 - 18:22
จะเอาเงินผู้ใช้ก็กรุณาออกแรงหน่อยทั้ง apple ทั้งคนเขียนโปรแกรม
ผมชอบแนวที่ apple เลือกจะไม่ให้อิสระกับผู้ใช้กับโปรแกรมเมอร์มากเกินไปกว่าสิ่งพวกเขาต้องใช้ในปัจจุบัน เพราะนิสัยไม่รู้จักพอของมนุษย์นี้ละน่ากลัวที่สุด
มองในมุมนี้ก็ถูกอีก
Architec Sun, 05/02/2010 - 18:37
In reply to จะเอาเงินผู้ใช้ก็กรุณาออกแรงห by animateex
มองในมุมนี้ก็ถูกอีก ยกตัวอย่างเกมบนฝั่งพีซีนี่กินสเปกโคตรๆ แรงเท่าไหร่ไม่เคยพอ ต้องอัพใหม่เรื่อยๆ -*-
เพื่อความสมจริงก็ลงทุนกันหน่อย :P
เห็นด้วยเลยครับ อ่านแล้วนึกถึ
graphic72 Sun, 05/02/2010 - 22:40
In reply to จะเอาเงินผู้ใช้ก็กรุณาออกแรงห by animateex
เห็นด้วยเลยครับ
อ่านแล้วนึกถึงตอนทำงาน
ไม่ว่าเราจะต้องทำงานหนักแค่ไหนก็ตาม ถ้าคนใช้ได้ประสบการณ์การใช้งานที่ดี
ยังไงก็คุ้มค่า
++
boatboat001 Thu, 05/27/2010 - 10:52
In reply to จะเอาเงินผู้ใช้ก็กรุณาออกแรงห by animateex
++
ขอบคุณครับ แต่ว่าอย่างนี้ก็เท
Sikachu Sun, 05/02/2010 - 18:35
ขอบคุณครับ
แต่ว่าอย่างนี้ก็เท่ากับว่า ถ้าอยู่ใน suspended state ก็ควรจะบันทึกทุกอย่างลง Local Storage แล้วใช่ไหมครับ เพื่อที่เตรียมการโดนปิด :D
สงสัยเหมือนกันเลย
HyBRiD Sun, 05/02/2010 - 21:50
In reply to ขอบคุณครับ แต่ว่าอย่างนี้ก็เท by Sikachu
สงสัยเหมือนกันเลย
คิดว่าทุกอย่างควรจะถูก save
khajochi Sun, 05/02/2010 - 22:21
In reply to ขอบคุณครับ แต่ว่าอย่างนี้ก็เท by Sikachu
คิดว่าทุกอย่างควรจะถูก save ตั้งแต่ออกจาก state active แล้วครับ
ตอนโปรแกรมเปลี่ยนจาก active ไปเป็น background จะมีเวลาให้ save ทุกอย่าง 5 วินาทีเช่นเดิมครับ :)
รอดูกันไป ;)
lingjaidee Sun, 05/02/2010 - 19:08
รอดูกันไป ;)
ผมเคยอ่านมาบ้างนะแต่
Ishmael Sun, 05/02/2010 - 19:17
ผมเคยอ่านมาบ้างนะแต่ ที่เรียบเรียบเรียงมา
ต้องบอกว่าทำให้เข้าใจง่ายขึ้นมาก ขอบคุณมากครับ
ชอบตอนน้ำตาไหล ๕๕๕
tomazzu Sun, 05/02/2010 - 19:18
ชอบตอนน้ำตาไหล ๕๕๕
อยากให้ขยายความ ของคำว่า
coolmilk Sun, 05/02/2010 - 19:39
อยากให้ขยายความ ของคำว่า ''นานเกินไป '' หน่อยครับ
คือใช้เวลาเท่าไหร่จึงเรียกว่านานเกินไปในการปิด process นั้นๆ จุกจิกหรือเปล่านะ แฮะๆ
ขอบคุณสำหรับรีวิวครับ ^^
ตามเอกสารของแอปเปิลไม่ได้ระบุ
khajochi Sun, 05/02/2010 - 22:32
In reply to อยากให้ขยายความ ของคำว่า by coolmilk
ตามเอกสารของแอปเปิลไม่ได้ระบุตัวเลขที่แน่นอนครับ แต่จะมี method ให้เราสามารถเรียกดูได้เหมือนกันว่าโปรแกรมเหลือเวลาอีกเท่าไหร่ (ชื่อ backgroundTimeRemaining) เข้าใจว่าอาจจะเอาเรื่องของแบตเตอรีที่เหลือมาคำนวณเข้าไปด้วย
อ่านเข้าใจง่ายมาก...
rabbitch Sun, 05/02/2010 - 19:44
อ่านเข้าใจง่ายมาก... ยอดเยี่ยม
ขอบคุณมากครับ
Zatang Sun, 05/02/2010 - 19:50
ขอบคุณมากครับ
โปรแกรมที่อยู่ในแรมมานานที่สุ
jirayu Sun, 05/02/2010 - 19:54
ลักษณะเหมือนใน Windows Mobile
แต่รายนั้น มันมักจะมีแรมหายไปกลางอากาศ :P
นอกจากนี้บรรทัดที่ quote มา
willwill Sun, 05/02/2010 - 21:06
In reply to โปรแกรมที่อยู่ในแรมมานานที่สุ by jirayu
นอกจากนี้บรรทัดที่ quote มา สุด ยังมีสระเกินด้วยครับ
แก้แล้วครับ ขอบคุณครับ :)
khajochi Sun, 05/02/2010 - 22:05
In reply to นอกจากนี้บรรทัดที่ quote มา by willwill
แก้แล้วครับ ขอบคุณครับ :)
อยากรู้ตัวเลขเหมือนกันว่ากี่น
analycer Sun, 05/02/2010 - 22:32
In reply to โปรแกรมที่อยู่ในแรมมานานที่สุ by jirayu
อยากรู้ตัวเลขเหมือนกันว่ากี่นาที/ชั่วโมง ??
เขียนได้ดีครับ ปล. Tap Tap
BlackMiracle Sun, 05/02/2010 - 19:54
เขียนได้ดีครับ
ปล. Tap Tap Revenge นะครับ ไม่ใช่ Tab Tab Revolution
แก้แล้วครับ ขอบคุณครับ :)
khajochi Sun, 05/02/2010 - 22:07
In reply to เขียนได้ดีครับ ปล. Tap Tap by BlackMiracle
แก้แล้วครับ ขอบคุณครับ :)
Tap Tap ด้วยครับ ไม่ใช่ Tab
BlackMiracle Sun, 05/02/2010 - 22:51
In reply to แก้แล้วครับ ขอบคุณครับ :) by khajochi
Tap Tap ด้วยครับ ไม่ใช่ Tab Tab
จุกจิกนิดนึงนะ :)
สงสัยตอนเขียนนึกถีง Dance
neizod Sun, 05/02/2010 - 23:32
In reply to Tap Tap ด้วยครับ ไม่ใช่ Tab by BlackMiracle
สงสัยตอนเขียนนึกถีง Dance Dance Revolution แน่ๆ เลย อิอิ
เห็นเขียนข้างต้นว่า
BreMen Sun, 05/02/2010 - 20:30
เห็นเขียนข้างต้นว่า เป็นบทความเชิงเทคนิค คิดว่าอ่านยากมาก
แต่อ่านเข้าใจง่ายมากเลยครับ หรือ เป็นเพราะศาสดา ทำให้มันง่าย หรือเปล่าเนาะ
ตอนนี้ผมใช้ N900 อยู่
WattZ Sun, 05/02/2010 - 20:49
ตอนนี้ผมใช้ N900 อยู่ ซึ่งเข้าใจว่าเป็น multitasking แท้ ๆ พอใช้งานจริง ๆ แบตหายไปกว่า 20% ใน 1 ชั่วโมง ผมว่าไม่ work เลย แนวทางของ apple น่าจะ work นะครับผมว่า
ผมว่า OS ทั่วไปที่ทำ
jane Sun, 05/02/2010 - 21:29
In reply to ตอนนี้ผมใช้ N900 อยู่ by WattZ
ผมว่า OS ทั่วไปที่ทำ multitasking แบบนี้
ก็ให้ programmer เขียนโปรแกรมใหม่โดยใช้เทคนิคแบบ iPhone 4.0 ก็ทำงานได้เช่นกัน จริงไหมครับ?
multitasking
ninja741 Mon, 05/03/2010 - 05:30
In reply to ตอนนี้ผมใช้ N900 อยู่ by WattZ
multitasking แท้ๆแล้วไม่จำเป็นว่าแบตต้องหมดไวนะ
ลองใช้ blackberry 9700 ดูครับ
โอ้ ขอบคุณสำหรับเนื้อหาครับ
way_cs16 Sun, 05/02/2010 - 21:00
โอ้ ขอบคุณสำหรับเนื้อหาครับ กำลังตัดสินใจไปเล่นตลาด iPhone พอดีเลย
ปล
จากรูปนี้ผมรู้ว่าคุณพวกเดียวกับผม ฮ่าๆ ไม่เกี่ยวกับรีวิวเลย
พวกแดงล้มเจ้า?
Arthuran Sun, 05/02/2010 - 23:51
In reply to โอ้ ขอบคุณสำหรับเนื้อหาครับ by way_cs16
พวกแดงล้มเจ้า?
น้องซาบซึ้ง
jirayu Mon, 05/03/2010 - 08:23
In reply to พวกแดงล้มเจ้า? by Arthuran
น้องซาบซึ้ง เห็นบ่อยที่ดว็บดราม่า
หึยยย พวกเสพติดดราม่า
AdmOd Mon, 05/03/2010 - 16:00
In reply to โอ้ ขอบคุณสำหรับเนื้อหาครับ by way_cs16
หึยยย พวกเสพติดดราม่า
ขอบคุณสำหรับบทความดีๆ
mekpro Sun, 05/02/2010 - 21:45
ขอบคุณสำหรับบทความดีๆ ครับ
ใครมีบทความเรื่อง Multitasking ของ Android มั่งครับ อยากเอามาเปรียบเทียบกัน
มีอันนี้ครับ อยู่บน official
mk Sun, 05/02/2010 - 23:29
In reply to ขอบคุณสำหรับบทความดีๆ by mekpro
มีอันนี้ครับ อยู่บน official Android Developer Blog แต่ผมยังไม่มีเวลาอ่านละเอียด Multitasking the Android Way
ผมว่ามันก็ทำงานคล้าย ๆ
mr_tawan Tue, 05/04/2010 - 00:48
In reply to มีอันนี้ครับ อยู่บน official by mk
ผมว่ามันก็ทำงานคล้าย ๆ กันครับ คือแบ่งเป็น State คล้าย ๆ กัน
โปรแกรมไหนที่จำศีลนานไป จะเสียชีวิตไปเนื่องจากขาดอากาศไปเอง อันนี้ก็คล้ายกันเช่นกัน
ผมว่าเป็นโมเดลที่ใช้ได้นะ ยกเว้นแต่จะมี Process ดื้อด้านไม่ยอมตาย อันนี้คงคุมลำบากหน่อย
ขอบคุณสำหรับข้อมูลนะครับ!!
snowman Sun, 05/02/2010 - 22:27
ขอบคุณสำหรับข้อมูลนะครับ!! ไม่ทราบว่าเนื้อหานี้เรียบเรียงจากการทดสอบ OS 4.0 ด้วยตัวเองหรือว่าแปลมาครับ??
อย่างไรก็แล้วแล้วแต่.. ผมขออนุญาติพูดถึงเนื้อหาในบางประเด็นนะครับ ถ้าผิดถูกอย่างไรก็ขออภัยด้วยครับ..
ช่วงที่บอกว่า "เราไม่สามารถสั่งปิดโปรแกรมที่อยู่ใน Suspended State เองได้ ถ้าจะให้เรียกง่ายๆ ก็คือไม่มี task manager ในไอโฟนนั่นเอง"
ผมคิดว่าปิดได้นะครับ.. ในขั้นตอนการแสดงไอคอนของโปรแกรมที่ทำงานอยู่.. (น่าจะเรียกว่า Exposé ได้นะ) กดที่ไอคอนของโปรแกรมที่แสดงไว้ด้านล่างค้างไว้ ก็จะมีเครื่องหมายปิดหรือกากบาทโผล่มาให้เลือกปิดโปรแกรมที่ไม่ต้องการได้ครับ..
อีกอย่างเกมส์ Tap Tap เวลาหยุดเกมส์ไว้ และจะทำการเล่นต่ออีกคร้ง ก็จะมีการนับถอยหลัง 3 2 1 เป็นปกติทุกครั้งอยู่แล้วนะครับ เพื่อเป็นการให้ผู้เล่นเตรียมพร้อมและจับจังหวะเพลงที่กำลังเล่นต่อจากที่เล่นค้างเอาไว้ได้ครับ
ซึ่งคิดว่าไม่น่าจะเกี่ยวกับที่บอกว่า ระบบจะ Capture หน้าจอโปรแกรมของเราไว้นะครับ ..
..
ยังไงก็ขอขอบคุณอีกครั้งครับผม..
ว้าว เยี่ยมไปเลยครับ
khajochi Sun, 05/02/2010 - 23:15
In reply to ขอบคุณสำหรับข้อมูลนะครับ!! by snowman
ว้าว เยี่ยมไปเลยครับ ขอบคุณสำหรับคำแนะนำครับ
เขียนเอง+อ่านจากหลายๆ ที่ครับ เลยอาจดูแปลกๆ อยู่บ้าง ^^"
เท่าที่ผมลองมันก็ปิดได้อย่างที่คุณ snowman บอกครับ แต่ก็ยังเป็นที่ถกเถียงกันอยู่ครับว่าปิดจริงหรือเปล่า(ตาม forum dev) เพราะบางคนเขียน debug ไว้แต่กดปิดแล้วไม่ยอมปิด (bug?) และที่สำคัญคือในเอกสารของแอปเปิลไม่ยอมบอกไว้ว่าปิดจริงหรือเปล่า
อืม .. ถ้าทำให้สับสนขอเปลี่ยนข้อความแล้วกันนะครับ
ประเด็นคือ ถ้าโปรแกรมที่เรียกกราฟฟิค เสียง และภาพ เวลาที่เปลี่ยนจาก suspended ไปเป็น active จะต้องเสียเวลาประมาณ 0.5 - 2 วินาทีเพื่อประมวลผลก่อนเล่นได้จริง แอปเปิลจึงแนะนำให้ทำหน้า loading screen ขึ้นมาครับ โดยอาจจะใช้ snap shot ก่อนปิดโปรแกรมได้
ขอบคุณมากครับผม..
snowman Mon, 05/03/2010 - 00:11
In reply to ว้าว เยี่ยมไปเลยครับ by khajochi
ขอบคุณมากครับผม..
โอ้ๆๆๆ
Bluetus Sun, 05/02/2010 - 22:34
โอ้ๆๆๆ ขอบคุณมากเรยครับเก็ตมากขึ้นหุหุ
ชอบแนวทางของ multitask ของ iPhone นะ
ตอน 3.0 บ่นว่ามันกินแบต 4.0 เลยหาวิธีที่มันไม่กินแบตจนได้ นับถือจริงๆ
อยากให้อธิบาย API ของ App Fast Switching ด้วยจังเลยครับ
ปล.เรื่องของ 3 2 1 ของ Tap Tap นี่มีมานานแล้วครับ เอาไว้ให้เวลาเข้าเกมจะได้จับจังหวะก่อนเล่นต่อ
ขอบคุณครับ อ่านแล้วเข้าใจ
graphic72 Sun, 05/02/2010 - 22:37
ขอบคุณครับ
อ่านแล้วเข้าใจ Multitaking ในแบบ Apple ได้ดียิ่งขึ้น
น่าทึ่งวิธีการคิดจริงๆ แต่ไม่รู้ว่าจะเป็นการเพิ่มงานหนักในนักพัฒนาโปรแกรมมากหรือเปล่า?
แต่ผมว่ามันก็เป็นวิธีบริหาร จัดการทรัพยากรที่มีอยู่อย่างจำกัดได้อย่างดี ยิ่งบนอุปกรณ์แบบนี้ด้วยแล้ว
ปล. จริงๆ อาจจะเพราะว่า Batt iPhone อยู่ไม่ทนด้วยแหละ เค้าถึงต้องหาวิธีการแบบนี้
ผมเข้าใจว่าหลักการมันคล้ายๆกั
Sephanov Sun, 05/02/2010 - 22:38
ผมเข้าใจว่าหลักการมันคล้ายๆกับ Android รึเปล่าครับ เพราะ Android จะดีดโปรแกรมทิ้งก็ต่อเมื่อมันไม่ทำงานแล้ว หรือเปิดไว้เป็นเวลานานแล้วไม่มีอะไรทำงานเป็น Background
จุดไม่เหมือนคือมันจำกัดรูปแบบ
lew Sun, 05/02/2010 - 23:01
In reply to ผมเข้าใจว่าหลักการมันคล้ายๆกั by Sephanov
จุดไม่เหมือนคือมันจำกัดรูปแบบงานที่ทำได้เมื่ออยู่ด้านหลัง
ส่วน Android ผมเห็นอยากทำอะไรก็ทำได้นะครับ
และคล้ายกับ Windows Phone 7
mementototem Sun, 05/02/2010 - 22:58
และคล้ายกับ Windows Phone 7 ด้วยหรือเปล่า (ถ้าผมจำไม่ผิด)
ซาบซึ้งที่รีวิวให้มากครับ
noyzilla Sun, 05/02/2010 - 23:59
ซาบซึ้งที่รีวิวให้มากครับ
เจ๋งอะ ขอบคุณนะครับ
pawoot.com Mon, 05/03/2010 - 00:14
เจ๋งอะ ขอบคุณนะครับ เขียนได้เข้าใจง่ายมากๆ เลยครับ
ผมเกลียดตัวซาบซึ้งครับ
Juney Mon, 05/03/2010 - 00:26
ผมเกลียดตัวซาบซึ้งครับ
+1
gotobanana Thu, 05/06/2010 - 08:57
In reply to ผมเกลียดตัวซาบซึ้งครับ by Juney
+1
สเปรดซาบซึ้งรึนี่ -*-
DoraeMew Mon, 05/03/2010 - 03:04
สเปรดซาบซึ้งรึนี่ -*-

เขียนได้ดี
pittaya Mon, 05/03/2010 - 11:54
เขียนได้ดี เขียนได้ถูกต้อง
Android user อย่างผมอ่านแล้วซาบซึ้งมากครับ
เดี๋ยวต่อไปจะมีการเลียนแบบ
F16 Mon, 05/03/2010 - 13:46
เดี๋ยวต่อไปจะมีการเลียนแบบ Multitaking แบบนี้ เพราะมันดีมากสำหรับระบบที่ต้องการประหยัดพลังงาน
และเป็นมิตรต่อผู้ใช้
นี่คือตัวอย่างที่ดีของ
chaiwathuy Mon, 05/03/2010 - 16:20
นี่คือตัวอย่างที่ดีของ Embeded / Realtime Syetem Design
ซึ่งต้องมุ่งเน้นไปยัง Software State เป็นสำคัญ
สรุปการแก้ปัญหาเรื่อง Multitasking ของแอปเปิลคือ
แก้จาก Stateless --> Stateful
เป็นรีวิว
GiggsWalk Mon, 05/03/2010 - 18:16
เป็นรีวิว ที่...ซาบซิ้ง...มากครับ
ขอบคุณมากสำหรับบทความนี้นะครั
Virusfowl Mon, 05/03/2010 - 19:28
ขอบคุณมากสำหรับบทความนี้นะครับ ทำให้ user เข้าใจถึงหลักการทำงานของ Software เบื้องหลังได้ดีขึ้นมาก ๆ
เขียนดีขนาดนี้ ตัด คำเตือน : บทความนี้เป็นบทความในเชิงเทคนิค ได้เลยหละครับ ^^
อ่านแล้วเข้าใจมากครับ ไปอธิบา
vtwifuvjt Tue, 05/04/2010 - 01:04
อ่านแล้วเข้าใจมากครับ
ไปอธิบายให้คนอื่นฟังต่อได้อีก เท่ไม่หยอก
ละเอียดยิบเลยครับ ขอบคุณมาก
EmZ Tue, 05/04/2010 - 01:17
ละเอียดยิบเลยครับ ขอบคุณมาก
อ่านแล้วน้ำตาเล็ด
fatro Tue, 05/04/2010 - 02:42
อ่านแล้วน้ำตาเล็ด รู้สึกสำนึกในความกรุณา 7 ประการ
ซาบซึ้งจริงๆ ขอบคุณครับ
kurosame Tue, 05/04/2010 - 10:44
ซาบซึ้งจริงๆ ขอบคุณครับ TvT
ปล จริงๆ การจัดการหน่วยความจำแบบ GC ของ Java น่าจะทำได้ตั้งแต่ iPhone OS รุ่นก่อนๆแล้วนะ มันเกี่ยวกับ multitasking ใน เวอร์ชั่น 4 นิดหน่อยเอง
เขียนดีมากๆเลยครับ
rulaz07 Sat, 05/08/2010 - 18:39
เขียนดีมากๆเลยครับ อ่านง่าย+เข้าใจ
+1 ขอบคุณมากคับ
boatboat001 Thu, 05/27/2010 - 11:03
+1 ขอบคุณมากคับ ดูตั้งใจเรียบเรียงและพยายามเขียนให้เข้าใจง่ายที่สุดเท่าที่จะทำได้มากคับ สู้ต่อไปคับ