Apple

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

Hiring! บริษัทที่น่าสนใจ

Gofive company cover
Gofive
“We create world-class software experience”
Siam Commercial Bank Public Company Limited company cover
Siam Commercial Bank Public Company Limited
"Let's start a brighter career future together"
Wisesight (Thailand) Co., Ltd. company cover
Wisesight (Thailand) Co., Ltd.
The Best Choice For Handling Social Media · High Expertise in Social Data · Most Advanced and Secure

Eka-X Sun, 05/02/2010 - 18:11

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

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

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

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

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

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

ขอบคุณครับ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Bluetus Sun, 05/02/2010 - 22:34

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

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

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

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

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

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

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

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

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

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

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

pittaya Mon, 05/03/2010 - 11:54

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

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

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

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

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

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

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

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

Apple
public://topics-images/apple_webp.png
SCB10X
public://topics-images/347823389_774095087711602_515970870797767330_n_webp.png
Windows 11
public://topics-images/hero-bloom-logo.jpg
Huawei
public://topics-images/huawei_standard_logo.svg_.png
Google Keep
public://topics-images/google_keep_2020_logo.svg_.png
Instagram
public://topics-images/instagram_logo_2022.svg_.png
SCB
public://topics-images/9crhwyxv_400x400.jpg
Microsoft
public://topics-images/microsoft_logo.svg_.png
Basecamp
public://topics-images/bwpepdi0_400x400.jpg
FTC
public://topics-images/seal_of_the_united_states_federal_trade_commission.svg_.png
Pinterest
public://topics-images/pinterest.png
Palantir
public://topics-images/-nzsuc6w_400x400.png
AIS Business
public://topics-images/logo-business-2021-1.png
PostgreSQL
public://topics-images/images.png
JetBrains
public://topics-images/icx8y2ta_400x400.png
Krungthai
public://topics-images/aam1jxs6_400x400.jpg
Palworld
public://topics-images/mccyhcqf_400x400.jpg
Bill Gates
public://topics-images/bill_gates-september_2024.jpg
VMware
public://topics-images/1nj4i1gp_400x400.jpg
Take-Two Interactive
public://topics-images/0khle7nh_400x400.jpg
OpenAI
public://topics-images/ztsar0jw_400x400.jpg
Thailand
public://topics-images/flag_of_thailand.svg_.png
NVIDIA
public://topics-images/srvczsfq_400x400.jpg
ServiceNow
public://topics-images/ytnrfphe_400x400.png
Klarna
public://topics-images/urcllpjp_400x400.png
Google Play
public://topics-images/play.png
Drupal
public://topics-images/drupal.png
Virtua Fighter
public://topics-images/virtua_figther_2024_logo.png
Paradox Interactive
public://topics-images/paradox_interactive_logo.svg_.png
Europa Universalis
public://topics-images/europa-icon.png
Nintendo Switch 2
public://topics-images/mainvisual.png
Cloudflare
public://topics-images/cloudflare_logo.svg_.png
Samsung
public://topics-images/samsung.png
Google
public://topics-images/google_2015_logo.svg_.png
Uber
public://topics-images/uber.png
Microsoft 365
public://topics-images/m365.png
USA
public://topics-images/flag_of_the_united_states.svg_.png
GM
public://topics-images/0pe0po-z_400x400.jpg
Perplexity
public://topics-images/perplex.jpg
Xperia
public://topics-images/xperia.png
iOS 18
public://topics-images/ios-18-num-96x96_2x.png
True
public://topics-images/true_logo.png
SoftBank
public://topics-images/softbank.jpg
Pac-Man
public://topics-images/pacman.png
Harry Potter
public://topics-images/harry.png
Marvel
public://topics-images/marvel.png
Skydance
public://topics-images/skydance.png
SEA
public://topics-images/sealogo.png
Find My Device
public://topics-images/find.png
Gemini
public://topics-images/google_gemini_logo.svg__1.png
Accessibility
public://topics-images/accessibility-128x128_2x.png
Material Design
public://topics-images/m3-favicon-apple-touch.png
Android 16
public://topics-images/android16.png
Android
public://topics-images/android_0.png
Firefox
public://topics-images/firefox_logo-2019.svg_.png
Google Messages
public://topics-images/messages.png
Notepad
public://topics-images/notepad.png
Singapore
public://topics-images/flag_of_singapore.svg_.png
Airbnb
public://topics-images/airbnb.png
PS5
public://topics-images/ps5.png
Krafton
public://topics-images/krafton.png
Doom
public://topics-images/doom-game-s_logo.svg_.png
AMD
public://topics-images/amd_logo.svg_.png
GTA
public://topics-images/gta_0.png
DoorDash
public://topics-images/doordash.png
YouTube
public://topics-images/yt.png
YouTube Music
public://topics-images/yt-music.png
Facebook
public://topics-images/fb.png
iQiyi
public://topics-images/iqiyi_0.png
Viu
public://topics-images/viu.png
Amazon Prime Video
public://topics-images/prime-vid.png
Spotify
public://topics-images/spotify.jpg
Apple TV
public://topics-images/apple-tv.png
HBO Max
public://topics-images/max.png
Threads
public://topics-images/threads.png
Alexa
public://topics-images/alexa.png
Kindle App
public://topics-images/kindle.png
Shopee
public://topics-images/shopee.png
Waze
public://topics-images/waze.png
Bilibili
public://topics-images/bili.png
Google Maps
public://topics-images/maps.png
Apple Music
public://topics-images/apple-music.png
Claude
public://topics-images/claude.png
TikTok
public://topics-images/tiktok.png
Xbox
public://topics-images/xbox.png
Tesla
public://topics-images/tesla.png
Chrome
public://topics-images/chrome.png
Google Calendar
public://topics-images/gcal.png
Google Home
public://topics-images/ghome.png
Google Meet
public://topics-images/meet.png
NotebookLM
public://topics-images/notebooklm.png
Reddit
public://topics-images/reddit.png
Assassin’s Creed
public://topics-images/ac.png
Mark Zuckerberg
public://topics-images/zuck.jpg
Meta
public://topics-images/meta.png
Meta AI
public://topics-images/meta-ai.png
Epic Games
public://topics-images/epic_games_logo.svg_.png
Unreal
public://topics-images/unreal_engine_logo-new_typeface-svg.png
Fortnite
public://topics-images/fortnite.png
DeepMind
public://topics-images/deepmind.png
Databricks
public://topics-images/databricks.png
Netflix
public://topics-images/netflix-logo.png
Microsoft Azure
public://topics-images/azure.png
Microsoft Copilot
public://topics-images/microsoft_copilot_icon.svg_.png
Bing
public://topics-images/bing.png
EA
public://topics-images/ea.png
Intel
public://topics-images/intel.png
Amazon
public://topics-images/amazon.png
AWS
public://topics-images/aws.png
Zoom
public://topics-images/zoom.png
Dropbox
public://topics-images/dropbox_0.png
Roblox
public://topics-images/roblox.png
Dell Technologies
public://topics-images/dell-tech.png
Nothing
public://topics-images/nothing.svg_.png
Microsoft Teams
public://topics-images/teams.png
Mojang
public://topics-images/mojang.png
Minecraft
public://topics-images/minecraft.png
Redis
public://topics-images/redis_logo.svg_.png
Ubisoft
public://topics-images/ubisoft_logo.svg_.png
Elden Ring
public://topics-images/elden.png
Brave
public://topics-images/brave.png
Opera
public://topics-images/opera.png
Vivaldi
public://topics-images/vivaldi.png
Microsoft Edge
public://topics-images/edge.png
Duolingo
public://topics-images/duolingo.png
LinkedIn
public://topics-images/linkedin.png
Canva
public://topics-images/canva.png
Realme
public://topics-images/realme.png
NASA
public://topics-images/nasa-logo.png
Booking.com
public://topics-images/booking.png
Agoda
public://topics-images/agoda.png
Bolt
public://topics-images/bolt.png
Grab
public://topics-images/grab.png
Temu
public://topics-images/temnu.png
LINE
public://topics-images/line.png
Facebook Messenger
public://topics-images/messenger.png
WhatsApp
public://topics-images/whatsapp.png
Telegram
public://topics-images/telegram.png
Signal
public://topics-images/signal.png
X.com
public://topics-images/x.png
Grok
public://topics-images/grok.png
xAI
public://topics-images/xai.png
CapCut
public://topics-images/capcut.png
Edits
public://topics-images/edit.png
Google One
public://topics-images/gone.png
Tinder
public://topics-images/tinger.png
Whoscall
public://topics-images/whoscall.png
OneDrive
public://topics-images/onedrive.png
Lightroom
public://topics-images/lr.png
Meitu
public://topics-images/meitu.png
Outlook
public://topics-images/outlook.png
Excel
public://topics-images/excel.png
PowerPoint
public://topics-images/ppt.png
Microsoft Word
public://topics-images/word.png
Phone Link
public://topics-images/phone-link.png
OneNote
public://topics-images/onenote.png
Windows App
public://topics-images/windows-app.png
Notion
public://topics-images/notion.png
Google Drive
public://topics-images/drive.png
YouTube Kids
public://topics-images/yt-kids.png
Gboard
public://topics-images/gboard.png
DeepSeek
public://topics-images/deepseek_logo.svg_.png
Prince of Persia
public://topics-images/prince-persia.png
Sony
public://topics-images/nq0nd2c0_400x400.jpg
Tencent
public://topics-images/z4xi4oyc_400x400.jpg
Cisco
public://topics-images/jmyca1yn_400x400.jpg
Alibaba
public://topics-images/4axflwia_400x400.jpg
Alibaba Cloud
public://topics-images/qm43orjx_400x400_cloud.png
Coinbase
public://topics-images/consumer_wordmark.png
CarPlay
public://topics-images/carplay.png
Rust
public://topics-images/rust-logo-blk.png
Red Hat
public://topics-images/redhat.png
Anthropic
public://topics-images/anthropic.png
Xcode
public://topics-images/xcode.png
Tim Cook
public://topics-images/tim-cook.jpg
Donald Trump
public://topics-images/trump.jpg
Microsoft Surface
public://topics-images/surface.jpg
Copilot+ PC
public://topics-images/copilotpc.png
CoreWeave
public://topics-images/hwqgzewx_400x400.jpg
Stellar Blade
public://topics-images/stellar-blade.jpg
Snapdragon
public://topics-images/snapdragon_chip.png
Qualcomm
public://topics-images/qualcomm-logo.svg_.png