Tags:

หลังจากที่แอปเปิลได้เปิดตัว 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

By: Perl
ContributorUbuntu
Perl's blog
on 02/05/10 16:37 #174594 toggle
Perl's picture

เห็นไอ้ตัวนี้ นึกว่าจ่าพิชิตมา Review ให้


ecution.style

By: aoddy
aoddy's blog
on 02/05/10 16:46 #174600 toggle
aoddy's picture

อ่านแล้วได้ความรู้..ขอบคุณสำหรับรีวิว ครับ


aoddy

By: dafty
AndroidWindows
dafty's blog
on 02/05/10 16:47 #174601 toggle
dafty's picture

Thx u very much. U r the man!

By: xredzanakub
ContributoriPhoneAndroidSymbian
xredzanakub's blog
on 02/05/10 16:57 #174607 toggle
xredzanakub's picture

อ่านแล้ว เข้าใจ ขึ้นมามากๆเลยครับ

By: PiKO
ContributorAndroid
PiKO's blog
on 02/05/10 17:00 #174608 toggle
PiKO's picture

ขอบคุณครับ..


:: DigiKin8 ::

By: GuBaRaK
iPhoneUbuntuWindows
GuBaRaK's blog
on 02/05/10 17:01 #174609 toggle
GuBaRaK's picture

เพิ่งเข้าใจอ่ะครับ สูงชั้นจริงๆ หุหุ (โปรแกรมเมอร์สู้ๆ)

By: mcimike
mcimike's blog
on 02/05/10 17:09 #174610 toggle
mcimike's picture

Thank you for useful review!

By: Eka-X
ContributoriPhoneSymbian
Eka-X's blog
on 02/05/10 17:11 #174612 toggle
Eka-X's picture

แจ่มมาก ขอบคุณสำหรับข้อมูลครับ "โปรแกรมเมอร์ มีหน้าที่เขียนโปรแกรม เพราะฉะนั้นต้องทำหน้าที่ให้ดีที่สุด ไม่ใช่ปล่อยให้ผู้ใช้ปวดหัว อย่างต้องไล่ปิดโปรแกรมใน task manager เอง"

By: naritai
Windows Phone
naritai's blog
on 02/05/10 17:19 #174615 toggle
naritai's picture

ขอบคุณครับ เป็นรีวิวที่อ่านและเข้าใจได้ง่ายดีครับ

By: animateex
iPhoneUbuntuWindows
animateex's blog
on 02/05/10 17:22 #174616 toggle
animateex's picture

จะเอาเงินผู้ใช้ก็กรุณาออกแรงหน่อยทั้ง apple ทั้งคนเขียนโปรแกรม

ผมชอบแนวที่ apple เลือกจะไม่ให้อิสระกับผู้ใช้กับโปรแกรมเมอร์มากเกินไปกว่าสิ่งพวกเขาต้องใช้ในปัจจุบัน เพราะนิสัยไม่รู้จักพอของมนุษย์นี้ละน่ากลัวที่สุด

By: Architec
Contributor
Architec's blog
on 02/05/10 17:37 #174621 Reply to:174616 toggle
Architec's picture

มองในมุมนี้ก็ถูกอีก ยกตัวอย่างเกมบนฝั่งพีซีนี่กินสเปกโคตรๆ แรงเท่าไหร่ไม่เคยพอ ต้องอัพใหม่เรื่อยๆ -*- เพื่อความสมจริงก็ลงทุนกันหน่อย :P

By: graphic72
iPhone
graphic72's blog
on 02/05/10 21:40 #174706 Reply to:174616 toggle
graphic72's picture

เห็นด้วยเลยครับ

อ่านแล้วนึกถึงตอนทำงาน ไม่ว่าเราจะต้องทำงานหนักแค่ไหนก็ตาม ถ้าคนใช้ได้ประสบการณ์การใช้งานที่ดี ยังไงก็คุ้มค่า

By: boatboat001
iPhone
boatboat001's blog
on 27/05/10 9:52 #179845 Reply to:174616 toggle
boatboat001's picture

++

By: Sikachu
ContributoriPhone
Sikachu's blog
on 02/05/10 17:35 #174620 toggle
Sikachu's picture

ขอบคุณครับ

แต่ว่าอย่างนี้ก็เท่ากับว่า ถ้าอยู่ใน suspended state ก็ควรจะบันทึกทุกอย่างลง Local Storage แล้วใช่ไหมครับ เพื่อที่เตรียมการโดนปิด :D


บล็อกของผม: http://sikachu.com

By: HyBRiD
iPhoneSymbianUbuntu
HyBRiD's blog
on 02/05/10 20:50 #174685 Reply to:174620 toggle
HyBRiD's picture

สงสัยเหมือนกันเลย


hybridplex

By: khajochi
WriteriPhone
khajochi's blog
on 02/05/10 21:21 #174696 Reply to:174620 toggle
khajochi's picture

คิดว่าทุกอย่างควรจะถูก save ตั้งแต่ออกจาก state active แล้วครับ ตอนโปรแกรมเปลี่ยนจาก active ไปเป็น background จะมีเวลาให้ save ทุกอย่าง 5 วินาทีเช่นเดิมครับ :)


Khajochi Blog : It's not a Bug ... It's a Feature

By: lingjaidee
Windows PhoneAndroidWindows
lingjaidee's blog
on 02/05/10 18:08 #174625 toggle
lingjaidee's picture

รอดูกันไป ;)

By: Ishmael
AndroidBlackberry
Ishmael's blog
on 02/05/10 18:17 #174627 toggle
Ishmael's picture

ผมเคยอ่านมาบ้างนะแต่ ที่เรียบเรียบเรียงมา ต้องบอกว่าทำให้เข้าใจง่ายขึ้นมาก ขอบคุณมากครับ

By: tomazzu
Windows PhoneBlackberrySymbianUbuntu
tomazzu's blog
on 02/05/10 18:18 #174628 toggle
tomazzu's picture

ชอบตอนน้ำตาไหล ๕๕๕


http://tomazzu.exteen.com

By: coolmilk
ContributorAndroidWindows
coolmilk's blog
on 02/05/10 18:39 #174637 toggle
coolmilk's picture

อยากให้ขยายความ ของคำว่า ''นานเกินไป '' หน่อยครับ

คือใช้เวลาเท่าไหร่จึงเรียกว่านานเกินไปในการปิด process นั้นๆ จุกจิกหรือเปล่านะ แฮะๆ

ขอบคุณสำหรับรีวิวครับ ^^

By: khajochi
WriteriPhone
khajochi's blog
on 02/05/10 21:32 #174699 Reply to:174637 toggle
khajochi's picture

ตามเอกสารของแอปเปิลไม่ได้ระบุตัวเลขที่แน่นอนครับ แต่จะมี method ให้เราสามารถเรียกดูได้เหมือนกันว่าโปรแกรมเหลือเวลาอีกเท่าไหร่ (ชื่อ backgroundTimeRemaining) เข้าใจว่าอาจจะเอาเรื่องของแบตเตอรีที่เหลือมาคำนวณเข้าไปด้วย


Khajochi Blog : It's not a Bug ... It's a Feature

By: rabbitch
rabbitch's blog
on 02/05/10 18:44 #174638 toggle
rabbitch's picture

อ่านเข้าใจง่ายมาก... ยอดเยี่ยม

By: Zatang
ContributoriPhoneAndroid
Zatang's blog
on 02/05/10 18:50 #174644 toggle
Zatang's picture

ขอบคุณมากครับ


อคติทำให้คนรับเหตุผลด้านเดียว

By: MrWhisper
ContributorWindows PhoneSymbianWindows
MrWhisper's blog
on 02/05/10 18:54 #174646 toggle
MrWhisper's picture

โปรแกรมที่อยู่ในแรมมานานที่สุึดจะถูกโยนออกจากแรมโดยอัตโนมัติ

ลักษณะเหมือนใน Windows Mobile

แต่รายนั้น มันมักจะมีแรมหายไปกลางอากาศ :P


[ JIRAYU.IN.TH ]

By: willwill
ContributorAndroidUbuntu
willwill's blog
on 02/05/10 20:06 #174674 Reply to:174646 toggle
willwill's picture

นอกจากนี้บรรทัดที่ quote มา สุด ยังมีสระเกินด้วยครับ

By: khajochi
WriteriPhone
khajochi's blog
on 02/05/10 21:05 #174690 Reply to:174674 toggle
khajochi's picture

แก้แล้วครับ ขอบคุณครับ :)


Khajochi Blog : It's not a Bug ... It's a Feature

By: analycer
iPhone
analycer's blog
on 02/05/10 21:32 #174700 Reply to:174646 toggle
analycer's picture

อยากรู้ตัวเลขเหมือนกันว่ากี่นาที/ชั่วโมง ??


Blessed be Your name...

By: BlackMiracle
AndroidWindows
BlackMiracle's blog
on 02/05/10 18:54 #174647 toggle
BlackMiracle's picture

เขียนได้ดีครับ

ปล. Tap Tap Revenge นะครับ ไม่ใช่ Tab Tab Revolution

By: khajochi
WriteriPhone
khajochi's blog
on 02/05/10 21:07 #174691 Reply to:174647 toggle
khajochi's picture

แก้แล้วครับ ขอบคุณครับ :)


Khajochi Blog : It's not a Bug ... It's a Feature

By: BlackMiracle
AndroidWindows
BlackMiracle's blog
on 02/05/10 21:51 #174709 Reply to:174691 toggle
BlackMiracle's picture

Tap Tap ด้วยครับ ไม่ใช่ Tab Tab จุกจิกนิดนึงนะ :)

By: neizod
ContributorTraineeUbuntu
neizod's blog
on 02/05/10 22:32 #174733 Reply to:174709 toggle
neizod's picture

สงสัยตอนเขียนนึกถีง Dance Dance Revolution แน่ๆ เลย อิอิ

By: BreMen
iPhoneWindows PhoneAndroid
BreMen's blog
on 02/05/10 19:30 #174662 toggle
BreMen's picture

เห็นเขียนข้างต้นว่า เป็นบทความเชิงเทคนิค คิดว่าอ่านยากมาก

แต่อ่านเข้าใจง่ายมากเลยครับ หรือ เป็นเพราะศาสดา ทำให้มันง่าย หรือเปล่าเนาะ


ถึงจะยากเพียงใด ก็ต้องผ่านไปให้ได้

By: WattZ
Red Hat
WattZ's blog
on 02/05/10 19:49 #174668 toggle
WattZ's picture

ตอนนี้ผมใช้ N900 อยู่ ซึ่งเข้าใจว่าเป็น multitasking แท้ ๆ พอใช้งานจริง ๆ แบตหายไปกว่า 20% ใน 1 ชั่วโมง ผมว่าไม่ work เลย แนวทางของ apple น่าจะ work นะครับผมว่า

By: jane
AndroidUbuntu
jane's blog
on 02/05/10 20:29 #174677 Reply to:174668 toggle
jane's picture

ผมว่า OS ทั่วไปที่ทำ multitasking แบบนี้ ก็ให้ programmer เขียนโปรแกรมใหม่โดยใช้เทคนิคแบบ iPhone 4.0 ก็ทำงานได้เช่นกัน จริงไหมครับ?


ความรู้ และความฉลาด ไม่ใช่สิ่งเดียวกัน จะมีประโยชน์อะไร ถ้าฉลาดแต่อยู่ในกะลา

By: ninja741
ninja741's blog
on 03/05/10 4:30 #174776 Reply to:174668 toggle
ninja741's picture

multitasking แท้ๆแล้วไม่จำเป็นว่าแบตต้องหมดไวนะ

ลองใช้ blackberry 9700 ดูครับ

By: way_cs16
Windows PhoneAndroidBlackberry
way_cs16's blog
on 02/05/10 20:00 #174671 toggle
way_cs16's picture

โอ้ ขอบคุณสำหรับเนื้อหาครับ กำลังตัดสินใจไปเล่นตลาด iPhone พอดีเลย

ปล จากรูปนี้ผมรู้ว่าคุณพวกเดียวกับผม ฮ่าๆ ไม่เกี่ยวกับรีวิวเลย

By: Arthuran
iPhoneAndroid
Arthuran's blog
on 02/05/10 22:51 #174736 Reply to:174671 toggle
Arthuran's picture

พวกแดงล้มเจ้า?


arthuran.net

By: MrWhisper
ContributorWindows PhoneSymbianWindows
MrWhisper's blog
on 03/05/10 7:23 #174787 Reply to:174736 toggle
MrWhisper's picture

น้องซาบซึ้ง เห็นบ่อยที่ดว็บดราม่า


[ JIRAYU.IN.TH ]

By: AdmOd
iPhoneAndroidBlackberry
AdmOd's blog
on 03/05/10 15:00 #174857 Reply to:174671 toggle
AdmOd's picture

หึยยย พวกเสพติดดราม่า

By: mekpro
ContributorAndroidUbuntu
mekpro's blog
on 02/05/10 20:45 #174682 toggle
mekpro's picture

ขอบคุณสำหรับบทความดีๆ ครับ

ใครมีบทความเรื่อง Multitasking ของ Android มั่งครับ อยากเอามาเปรียบเทียบกัน

By: mk
FounderAndroidRed HatWindows
mk's blog
on 02/05/10 22:29 #174731 Reply to:174682 toggle
mk's picture

มีอันนี้ครับ อยู่บน official Android Developer Blog แต่ผมยังไม่มีเวลาอ่านละเอียด Multitasking the Android Way

By: mr_tawan
ContributoriPhoneAndroidWindows
mr_tawan's blog
on 03/05/10 23:48 #174970 Reply to:174731 toggle
mr_tawan's picture

ผมว่ามันก็ทำงานคล้าย ๆ กันครับ คือแบ่งเป็น State คล้าย ๆ กัน

โปรแกรมไหนที่จำศีลนานไป จะเสียชีวิตไปเนื่องจากขาดอากาศไปเอง อันนี้ก็คล้ายกันเช่นกัน

ผมว่าเป็นโมเดลที่ใช้ได้นะ ยกเว้นแต่จะมี Process ดื้อด้านไม่ยอมตาย อันนี้คงคุมลำบากหน่อย


By: snowman
iPhone
snowman's blog
on 02/05/10 21:27 #174697 toggle
snowman's picture

ขอบคุณสำหรับข้อมูลนะครับ!! ไม่ทราบว่าเนื้อหานี้เรียบเรียงจากการทดสอบ OS 4.0 ด้วยตัวเองหรือว่าแปลมาครับ??

อย่างไรก็แล้วแล้วแต่.. ผมขออนุญาติพูดถึงเนื้อหาในบางประเด็นนะครับ ถ้าผิดถูกอย่างไรก็ขออภัยด้วยครับ..

ช่วงที่บอกว่า "เราไม่สามารถสั่งปิดโปรแกรมที่อยู่ใน Suspended State เองได้ ถ้าจะให้เรียกง่ายๆ ก็คือไม่มี task manager ในไอโฟนนั่นเอง"

ผมคิดว่าปิดได้นะครับ.. ในขั้นตอนการแสดงไอคอนของโปรแกรมที่ทำงานอยู่.. (น่าจะเรียกว่า Exposé ได้นะ) กดที่ไอคอนของโปรแกรมที่แสดงไว้ด้านล่างค้างไว้ ก็จะมีเครื่องหมายปิดหรือกากบาทโผล่มาให้เลือกปิดโปรแกรมที่ไม่ต้องการได้ครับ..

อีกอย่างเกมส์ Tap Tap เวลาหยุดเกมส์ไว้ และจะทำการเล่นต่ออีกคร้ง ก็จะมีการนับถอยหลัง 3 2 1 เป็นปกติทุกครั้งอยู่แล้วนะครับ เพื่อเป็นการให้ผู้เล่นเตรียมพร้อมและจับจังหวะเพลงที่กำลังเล่นต่อจากที่เล่นค้างเอาไว้ได้ครับ ซึ่งคิดว่าไม่น่าจะเกี่ยวกับที่บอกว่า ระบบจะ Capture หน้าจอโปรแกรมของเราไว้นะครับ .. ..

ยังไงก็ขอขอบคุณอีกครั้งครับผม..


.. ◕‿◕

By: khajochi
WriteriPhone
khajochi's blog
on 02/05/10 22:15 #174723 Reply to:174697 toggle
khajochi's picture

ว้าว เยี่ยมไปเลยครับ ขอบคุณสำหรับคำแนะนำครับ

ไม่ทราบว่าเนื้อหานี้เรียบเรียงจากการทดสอบ OS 4.0 ด้วยตัวเองหรือว่าแปลมาครับ??

เขียนเอง+อ่านจากหลายๆ ที่ครับ เลยอาจดูแปลกๆ อยู่บ้าง ^^"

ในขั้นตอนการแสดงไอคอนของโปรแกรมที่ทำงานอยู่.. (น่าจะเรียกว่า Exposé ได้นะ) กดที่ไอคอนของโปรแกรมที่แสดงไว้ด้านล่างค้างไว้ ก็จะมีเครื่องหมายปิดหรือกากบาทโผล่มาให้เลือกปิดโปรแกรมที่ไม่ต้องการได้ครับ..

เท่าที่ผมลองมันก็ปิดได้อย่างที่คุณ snowman บอกครับ แต่ก็ยังเป็นที่ถกเถียงกันอยู่ครับว่าปิดจริงหรือเปล่า(ตาม forum dev) เพราะบางคนเขียน debug ไว้แต่กดปิดแล้วไม่ยอมปิด (bug?) และที่สำคัญคือในเอกสารของแอปเปิลไม่ยอมบอกไว้ว่าปิดจริงหรือเปล่า

Tap Tap เวลาหยุดเกมส์ไว้ และจะทำการเล่นต่ออีกคร้ง ก็จะมีการนับถอยหลัง 3 2 1 เป็นปกติทุกครั้งอยู่แล้วนะครับ เพื่อเป็นการให้ผู้เล่นเตรียมพร้อมและจับจังหวะเพลงที่กำลังเล่นต่อจากที่เล่นค้างเอาไว้ได้ครับ ซึ่งคิดว่าไม่น่าจะเกี่ยวกับที่บอกว่า ระบบจะ Capture หน้าจอโปรแกรมของเราไว้นะครับ ..

อืม .. ถ้าทำให้สับสนขอเปลี่ยนข้อความแล้วกันนะครับ ประเด็นคือ ถ้าโปรแกรมที่เรียกกราฟฟิค เสียง และภาพ เวลาที่เปลี่ยนจาก suspended ไปเป็น active จะต้องเสียเวลาประมาณ 0.5 - 2 วินาทีเพื่อประมวลผลก่อนเล่นได้จริง แอปเปิลจึงแนะนำให้ทำหน้า loading screen ขึ้นมาครับ โดยอาจจะใช้ snap shot ก่อนปิดโปรแกรมได้


Khajochi Blog : It's not a Bug ... It's a Feature

By: snowman
iPhone
snowman's blog
on 02/05/10 23:11 #174741 Reply to:174723 toggle
snowman's picture

ขอบคุณมากครับผม..


.. ◕‿◕

By: Bluetus
iPhone
Bluetus's blog
on 02/05/10 21:34 #174702 toggle
Bluetus's picture

โอ้ๆๆๆ ขอบคุณมากเรยครับเก็ตมากขึ้นหุหุ

ชอบแนวทางของ multitask ของ iPhone นะ

ตอน 3.0 บ่นว่ามันกินแบต 4.0 เลยหาวิธีที่มันไม่กินแบตจนได้ นับถือจริงๆ

อยากให้อธิบาย API ของ App Fast Switching ด้วยจังเลยครับ

ปล.เรื่องของ 3 2 1 ของ Tap Tap นี่มีมานานแล้วครับ เอาไว้ให้เวลาเข้าเกมจะได้จับจังหวะก่อนเล่นต่อ


My Website - http://ibluetus.com

Follow me @FollowBluetus

"Brand Apple is "Tool for creative minds" not "Tool for rich guy"

By: graphic72
iPhone
graphic72's blog
on 02/05/10 21:37 #174703 toggle
graphic72's picture

ขอบคุณครับ อ่านแล้วเข้าใจ Multitaking ในแบบ Apple ได้ดียิ่งขึ้น

น่าทึ่งวิธีการคิดจริงๆ แต่ไม่รู้ว่าจะเป็นการเพิ่มงานหนักในนักพัฒนาโปรแกรมมากหรือเปล่า? แต่ผมว่ามันก็เป็นวิธีบริหาร จัดการทรัพยากรที่มีอยู่อย่างจำกัดได้อย่างดี ยิ่งบนอุปกรณ์แบบนี้ด้วยแล้ว

ปล. จริงๆ อาจจะเพราะว่า Batt iPhone อยู่ไม่ทนด้วยแหละ เค้าถึงต้องหาวิธีการแบบนี้

By: Sephanov
iPhoneAndroid
Sephanov's blog
on 02/05/10 21:38 #174704 toggle
Sephanov's picture

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

By: lew
FounderAndroidSymbian
lew's blog
on 02/05/10 22:01 #174715 Reply to:174704 toggle
lew's picture

จุดไม่เหมือนคือมันจำกัดรูปแบบงานที่ทำได้เมื่ออยู่ด้านหลัง

ส่วน Android ผมเห็นอยากทำอะไรก็ทำได้นะครับ


LewCPE's Google+

By: mementototem
ContributorJusci's WriterWindows
mementototem's blog
on 02/05/10 21:58 #174712 toggle
mementototem's picture

และคล้ายกับ Windows Phone 7 ด้วยหรือเปล่า (ถ้าผมจำไม่ผิด)


Jusci - Google Plus - Twitter - FSN

By: noyzilla
Android
noyzilla's blog
on 02/05/10 22:59 #174737 toggle
noyzilla's picture

ซาบซึ้งที่รีวิวให้มากครับ

By: pawoot.com
WriterAndroid
pawoot.com's blog
on 02/05/10 23:14 #174742 toggle
pawoot.com's picture

เจ๋งอะ ขอบคุณนะครับ เขียนได้เข้าใจง่ายมากๆ เลยครับ


Pawoot.com

By: Juney
Juney's blog
on 02/05/10 23:26 #174744 toggle
Juney's picture

ผมเกลียดตัวซาบซึ้งครับ

By: gotobanana
iPhoneAndroidBlackberrySymbian
gotobanana's blog
on 06/05/10 7:57 #175537 Reply to:174744 toggle
gotobanana's picture

+1

By: DoraeMew
AndroidSymbianUbuntuWindows
DoraeMew's blog
on 03/05/10 2:04 #174762 toggle
DoraeMew's picture

สเปรดซาบซึ้งรึนี่ -*-


บู๊ลิ้ม

By: pittaya
WriterAndroidUbuntu
pittaya's blog
on 03/05/10 10:54 #174815 toggle
pittaya's picture

เขียนได้ดี เขียนได้ถูกต้อง Android user อย่างผมอ่านแล้วซาบซึ้งมากครับ


pittaya.com

By: F16
iPhoneWindows PhoneAndroidBlackberry
F16's blog
on 03/05/10 12:46 #174838 toggle
F16's picture

เดี๋ยวต่อไปจะมีการเลียนแบบ Multitaking แบบนี้ เพราะมันดีมากสำหรับระบบที่ต้องการประหยัดพลังงาน และเป็นมิตรต่อผู้ใช้

By: chaiwathuy
chaiwathuy's blog
on 03/05/10 15:20 #174858 toggle
chaiwathuy's picture

นี่คือตัวอย่างที่ดีของ Embeded / Realtime Syetem Design ซึ่งต้องมุ่งเน้นไปยัง Software State เป็นสำคัญ

สรุปการแก้ปัญหาเรื่อง Multitasking ของแอปเปิลคือ แก้จาก Stateless --> Stateful

By: GiggsWalk
AndroidUbuntu
GiggsWalk's blog
on 03/05/10 17:16 #174881 toggle
GiggsWalk's picture

เป็นรีวิว ที่...ซาบซิ้ง...มากครับ

By: Virusfowl
ContributorSymbian
Virusfowl's blog
on 03/05/10 18:28 #174902 toggle
Virusfowl's picture

ขอบคุณมากสำหรับบทความนี้นะครับ ทำให้ user เข้าใจถึงหลักการทำงานของ Software เบื้องหลังได้ดีขึ้นมาก ๆ

เขียนดีขนาดนี้ ตัด คำเตือน : บทความนี้เป็นบทความในเชิงเทคนิค ได้เลยหละครับ ^^


@ Virusfowl

sometime something with someone

By: vtwifuvjt
AndroidUbuntu
vtwifuvjt's blog
on 04/05/10 0:04 #174978 toggle
vtwifuvjt's picture

อ่านแล้วเข้าใจมากครับ

ไปอธิบายให้คนอื่นฟังต่อได้อีก เท่ไม่หยอก

By: EmZ
Blackberry
EmZ's blog
on 04/05/10 0:17 #174986 toggle
EmZ's picture

ละเอียดยิบเลยครับ ขอบคุณมาก


Django world

By: fatro
ContributoriPhoneBlackberryWindows
fatro's blog
on 04/05/10 1:42 #174999 toggle
fatro's picture

อ่านแล้วน้ำตาเล็ด รู้สึกสำนึกในความกรุณา 7 ประการ

By: kurosame
ContributoriPhone
kurosame's blog
on 04/05/10 9:44 #175020 toggle
kurosame's picture

ซาบซึ้งจริงๆ ขอบคุณครับ TvT

ปล จริงๆ การจัดการหน่วยความจำแบบ GC ของ Java น่าจะทำได้ตั้งแต่ iPhone OS รุ่นก่อนๆแล้วนะ มันเกี่ยวกับ multitasking ใน เวอร์ชั่น 4 นิดหน่อยเอง


เข้าท่ากับบ้าบอ

By: rulaz07
ContributorAndroid
rulaz07's blog
on 08/05/10 17:39 #176144 toggle
rulaz07's picture

เขียนดีมากๆเลยครับ อ่านง่าย+เข้าใจ


@korkid

By: boatboat001
iPhone
boatboat001's blog
on 27/05/10 10:03 #179849 toggle
boatboat001's picture

+1 ขอบคุณมากคับ ดูตั้งใจเรียบเรียงและพยายามเขียนให้เข้าใจง่ายที่สุดเท่าที่จะทำได้มากคับ สู้ต่อไปคับ