Tags:
Node Thumbnail

หลังจากที่แอปเปิลได้เปิดตัว iPhone OS4 เมื่อเดือนที่ผ่านมา ความสามารถใหม่ที่โดดเด่นที่สุดและเป็นสิ่งที่ผู้ใช้ไอโฟนรอคอยมานาน นั่นก็คือการทำ Multitasking นั่นเอง ซึ่งแอปเปิลได้คุยไว้ว่า วิธีการทำ Multitasking ในแบบไอโฟนนั้น ทั้งประหยัดแบตเตอรี่และไม่ทำให้เครื่องช้าลงแต่อย่างใด

หลังจากที่ผมได้ทำการศึกษา Multitasking ในแบบของแอปเปิลโดยละเอียดมากขึ้น ก็พบว่าแนวทางและวิธีการที่แอปเปิลเลือกใช้นั้น นอกจากจะมีเรื่องราวของที่มาที่ไป การแก้ปัญหาต่างๆ แล้ว ยังมีความน่าสนใจในเชิง Software Engineer อีกหลายๆ ด้านอีกด้วย

คำเตือน : บทความนี้เป็นบทความในเชิงเทคนิค

No Description

iPhone OS 1 - 3
ในปัจจุบัน เป็นที่รู้กันว่า โปรแกรมในไอโฟนนั้นไม่สามารถทำงานหลายตัวพร้อมกันได้ หากเราต้องการเปิดโปรแกรมหนึ่ง จะต้องทำการปิดอีกโปรแกรมหนึ่ง (ไม่นับโปรแกรมที่แอปเปิลเขียนเอง อย่างการเล่นเพลง หรือการรับสายโทรศัพท์)

  • โปรแกรมมีเพียง 2 State คือ Active กับ Not Running (เปิดกับปิด)
  • เมื่อเรากดเปิดโปรแกรม ข้อมูลทุกอย่างจะถูกเก็บอยู่ในแรม (Ram, Memory) เช่นเดียวกับโปรแกรมในคอมพิวเตอร์
  • หลังจากที่เรากดปุ่ม home โปรแกรมที่ถูกปิดจะมีเวลา 5 วินาที ในการเก็บข้อมูลต่างๆ ก่อนที่จะถูกโยนทิ้งออกไปจากแรม
  • ซึ่งโปรแกรมส่วนใหญ่ก็จะใช้เวลา 5 วินาทีนั้น save ข้อมูลที่จำเป็น เช่น เล่นเกมส์ถึงด่านไหนแล้ว หน้าจอตอนนี้อยู่ที่หน้าไหน หรือเราพิมพ์อะไรค้างไว้ล่าสุด
  • 5 วินาที นั้นเร็วมาก ดังนั้นไม่มีทางเลยที่จะเก็บข้่อมูลไปลง server เช่นถ้าเรา upload รูปใน flickr อยู่แล้วกดปิดโปรแกรม ระบบทุกอย่างก็จะปิดไปเลย
  • ถ้ากดเปิดโปรแกรมขึ้นมาใหม่ มันจะเริ่มโหลดโปรแกรมทุกอย่างตั้งแต่ต้น เพราะโปรแกรมถูกเอาออกจากแรมไปแล้ว
  • โปรแกรมที่เปิดเสร็จ ก็จะใช้ข้อมูลใน local database เพื่อจำว่าเราเล่นเกมส์มาถึงไหนแล้ว, พิมพ์อะไรค้างไว้รึเปล่า, ไฟล์ที่ upload เมื่อกี้ไม่สำเร็จนะ จะทำการ upload ใหม่หรือไม่

No Description

ตัวอย่างการจัดเก็บโปรแกรมในแรมของ iPhone OS 1-3

เนื่องจากระบบมี state ให้เพียงแค่ เปิดและปิด ทำให้เราสามารถใช้งานโปรแกรมได้เพียงแค่ 1 โปรแกรมเท่านั้น จึงเป็นจุดอ่อนสำคัญของไอโฟน เพราะนอกจากทำงานได้ทีละโปรแกรมแล้ว การเปิด-ปิดโปรแกรมใหม่ต้องใช้เวลาในการโหลดทุกอย่างตั้งแต่เริ่มต้นใหม่ทุกครั้ง ทำให้เสียเวลา

No Description

ปัจจุบันนักพัฒนาต้องเก็บข้อมูลบางส่วนใน 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 ที่จ๊อบส์เดโมก็ได้ครับ

No Description

ตัวอย่าง 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

Get latest news from Blognone

Comments

By: Perl
ContributoriPhoneUbuntu
on 2 May 2010 - 17:37 #174594
Perl's picture

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

By: aoddy on 2 May 2010 - 17:46 #174600

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

By: dafty
AndroidWindowsIn Love
on 2 May 2010 - 17:47 #174601

Thx u very much. U r the man!

By: xredzanakub
ContributoriPhoneAndroidSymbian
on 2 May 2010 - 17:57 #174607

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

By: PiKO
ContributorAndroid
on 2 May 2010 - 18:00 #174608

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


:: DigiKin8 ::

By: GuBaRaK
iPhoneUbuntuWindows
on 2 May 2010 - 18:01 #174609
GuBaRaK's picture

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

By: mcimike on 2 May 2010 - 18:09 #174610
mcimike's picture

Thank you for useful review!

By: Eka-X
ContributoriPhoneAndroidIn Love
on 2 May 2010 - 18:11 #174612

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

By: naritai
iPhoneWindows
on 2 May 2010 - 18:19 #174615
naritai's picture

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

By: animateex
iPhoneAndroidUbuntuWindows
on 2 May 2010 - 18:22 #174616
animateex's picture

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

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

By: Architec
ContributorWindows PhoneAndroidWindows
on 2 May 2010 - 18:37 #174621 Reply to:174616

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

By: graphic72 on 2 May 2010 - 22:40 #174706 Reply to:174616
graphic72's picture

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

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

By: boatboat001
iPhoneWindows
on 27 May 2010 - 10:52 #179845 Reply to:174616
boatboat001's picture

++

By: Sikachu
ContributoriPhoneIn Love
on 2 May 2010 - 18:35 #174620
Sikachu's picture

ขอบคุณครับ

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


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

By: HyBRiD
ContributoriPhoneSymbianUbuntu
on 2 May 2010 - 21:50 #174685 Reply to:174620
HyBRiD's picture

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

By: khajochi
WriteriPhoneIn Love
on 2 May 2010 - 22:21 #174696 Reply to:174620
khajochi's picture

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


แฟนพันธุ์แท้สตีฟจ็อบส์ | MacThai.com

By: lingjaidee
ContributoriPhoneAndroid
on 2 May 2010 - 19:08 #174625
lingjaidee's picture

รอดูกันไป ;)


my blog

By: Ishmael
iPhoneAndroidWindows
on 2 May 2010 - 19:17 #174627

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

By: tomazzu
AndroidUbuntu
on 2 May 2010 - 19:18 #174628

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

By: coolmilk
ContributorAndroidWindows
on 2 May 2010 - 19:39 #174637

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

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

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

By: khajochi
WriteriPhoneIn Love
on 2 May 2010 - 22:32 #174699 Reply to:174637
khajochi's picture

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


แฟนพันธุ์แท้สตีฟจ็อบส์ | MacThai.com

By: rabbitch on 2 May 2010 - 19:44 #174638

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

By: Zatang
ContributoriPhoneAndroid
on 2 May 2010 - 19:50 #174644

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


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

By: jirayu
ContributorWindows PhoneBlackberrySymbian
on 2 May 2010 - 19:54 #174646

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

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

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


By: willwill
ContributorAndroid
on 2 May 2010 - 21:06 #174674 Reply to:174646
willwill's picture

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

By: khajochi
WriteriPhoneIn Love
on 2 May 2010 - 22:05 #174690 Reply to:174674
khajochi's picture

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


แฟนพันธุ์แท้สตีฟจ็อบส์ | MacThai.com

By: analycer
iPhone
on 2 May 2010 - 22:32 #174700 Reply to:174646

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

By: BlackMiracle
WriterAndroidUbuntuWindows
on 2 May 2010 - 19:54 #174647

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

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


Pitawat's Blog :: บล็อกผมเองครับ

By: khajochi
WriteriPhoneIn Love
on 2 May 2010 - 22:07 #174691 Reply to:174647
khajochi's picture

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


แฟนพันธุ์แท้สตีฟจ็อบส์ | MacThai.com

By: BlackMiracle
WriterAndroidUbuntuWindows
on 2 May 2010 - 22:51 #174709 Reply to:174691

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


Pitawat's Blog :: บล็อกผมเองครับ

By: neizod
ContributorTraineeIn Love
on 2 May 2010 - 23:32 #174733 Reply to:174709
neizod's picture

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

By: BreMen
iPhoneWindows PhoneAndroid
on 2 May 2010 - 20:30 #174662
BreMen's picture

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

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

By: WattZ
AndroidRed HatSymbianWindows
on 2 May 2010 - 20:49 #174668
WattZ's picture

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

By: jane
AndroidUbuntu
on 2 May 2010 - 21:29 #174677 Reply to:174668
jane's picture

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

By: ninja741 on 3 May 2010 - 05:30 #174776 Reply to:174668

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

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

By: way_cs16
ContributorWindows PhoneAndroidBlackberry
on 2 May 2010 - 21:00 #174671
way_cs16's picture

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

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

By: Arthuran
iPhoneAndroidUbuntuWindows
on 2 May 2010 - 23:51 #174736 Reply to:174671
Arthuran's picture

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

By: jirayu
ContributorWindows PhoneBlackberrySymbian
on 3 May 2010 - 08:23 #174787 Reply to:174736

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


By: AdmOd
iPhoneWindows
on 3 May 2010 - 16:00 #174857 Reply to:174671

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

By: mekpro
ContributorAndroidUbuntu
on 2 May 2010 - 21:45 #174682
mekpro's picture

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

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

By: mk
FounderAndroid
on 2 May 2010 - 23:29 #174731 Reply to:174682
mk's picture

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

By: mr_tawan
ContributoriPhoneAndroidWindows
on 4 May 2010 - 00:48 #174970 Reply to:174731
mr_tawan's picture

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

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

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


  • 9tawan.net บล็อกส่วนตัวฮับ
By: snowman on 2 May 2010 - 22:27 #174697
snowman's picture

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

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

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

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

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

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

By: khajochi
WriteriPhoneIn Love
on 2 May 2010 - 23:15 #174723 Reply to:174697
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 ก่อนปิดโปรแกรมได้


แฟนพันธุ์แท้สตีฟจ็อบส์ | MacThai.com

By: snowman on 3 May 2010 - 00:11 #174741 Reply to:174723
snowman's picture

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

By: Bluetus
iPhone
on 2 May 2010 - 22:34 #174702
Bluetus's picture

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

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

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

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

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

By: graphic72 on 2 May 2010 - 22:37 #174703
graphic72's picture

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

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

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

By: Sephanov
iPhoneUbuntu
on 2 May 2010 - 22:38 #174704
Sephanov's picture

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

By: lew
FounderJusci's WriterMEconomicsAndroid
on 2 May 2010 - 23:01 #174715 Reply to:174704
lew's picture

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

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


lewcpe.com, @wasonliw

By: mementototem
ContributorJusci's WriterAndroidWindows
on 2 May 2010 - 22:58 #174712
mementototem's picture

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


Jusci - Google Plus - Twitter

By: noyzilla
Android
on 2 May 2010 - 23:59 #174737

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

No DescriptionNo DescriptionNo Description

By: pawoot.com
WriterAndroid
on 3 May 2010 - 00:14 #174742
pawoot.com's picture

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


Pawoot.com

By: Juney on 3 May 2010 - 00:26 #174744
Juney's picture

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

By: gotobanana
iPhoneAndroidBlackberrySymbian
on 6 May 2010 - 08:57 #175537 Reply to:174744
gotobanana's picture

+1

By: DoraeMew
AndroidSymbianUbuntuWindows
on 3 May 2010 - 03:04 #174762

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

By: pittaya
WriterAndroidUbuntuIn Love
on 3 May 2010 - 11:54 #174815
pittaya's picture

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


pittaya.com

By: F16
iPhoneWindows PhoneAndroidIn Love
on 3 May 2010 - 13:46 #174838

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

By: chaiwathuy on 3 May 2010 - 16:20 #174858

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

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

By: GiggsWalk
AndroidUbuntu
on 3 May 2010 - 18:16 #174881

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

By: Virusfowl
ContributorAndroidSymbianWindows
on 3 May 2010 - 19:28 #174902

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

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


@ Virusfowl

I'm not a dev. not yet a user.

By: vtwifuvjt
AndroidUbuntuWindows
on 4 May 2010 - 01:04 #174978
vtwifuvjt's picture

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

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

By: EmZ
iPhoneUbuntu
on 4 May 2010 - 01:17 #174986

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

By: fatro
ContributoriPhoneAndroid
on 4 May 2010 - 02:42 #174999
fatro's picture

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

By: kurosame
ContributoriPhone
on 4 May 2010 - 10:44 #175020
kurosame's picture

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

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


{$user} was not an Imposter

By: rulaz07
ContributoriPhoneAndroidBlackberry
on 8 May 2010 - 18:39 #176144

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

By: boatboat001
iPhoneWindows
on 27 May 2010 - 11:03 #179849
boatboat001's picture

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