هنوز افراد زیادی هستند که نمی دانند چند وظیفه ای در iOS چگونه کار می کند. با این حال، برای شروع، لازم به ذکر است که این چندوظیفه واقعی نیست، بلکه یک راه حل بسیار هوشمندانه است که بر سیستم یا کاربر سنگینی نمی کند.
اغلب میتوان خرافاتی را شنید که برنامههایی که در پسزمینه در iOS اجرا میشوند، حافظه عامل را پر میکنند، که منجر به کندی سیستم و عمر باتری میشود، بنابراین کاربر باید آنها را به صورت دستی خاموش کند. نوار مولتی تسکینگ در واقع شامل فهرستی از تمام فرآیندهای پسزمینه در حال اجرا نیست، بلکه فقط شامل آخرین برنامههای راهاندازی شده است. بنابراین کاربر به جز در موارد معدودی نیازی به نگرانی در مورد فرآیندهای در حال اجرا در پس زمینه ندارد. هنگامی که دکمه Home را فشار می دهید، برنامه معمولاً به حالت Sleep یا بسته می شود تا دیگر پردازنده یا باتری بارگیری نشود و در صورت لزوم حافظه لازم را آزاد کند.
بنابراین، وقتی دهها فرآیند در حال اجرا دارید، این چندوظیفگی کامل نیست. فقط چند فرآیند ثانویه در پسزمینه اجرا میشوند. به همین دلیل است که به ندرت با خرابی برنامه در iOS مواجه می شوید، به عنوان مثال اندروید غرق در برنامه های در حال اجرا است که کاربر باید از آنها مراقبت کند. این امر از یک طرف کار با دستگاه را ناخوشایند می کند و از طرف دیگر باعث می شود که مثلاً راه اندازی کند و انتقال بین برنامه ها کاهش یابد.
نوع زمان اجرای برنامه
برنامه در دستگاه iOS شما در یکی از این 5 حالت است:
- دویدن: برنامه شروع شده و در پیش زمینه اجرا می شود
- زمینه: هنوز در حال اجرا است اما در پس زمینه اجرا می شود (ما می توانیم از برنامه های دیگر استفاده کنیم)
- معلق: هنوز از رم استفاده می کنید اما اجرا نمی شود
- غیر فعال: برنامه در حال اجرا است اما دستورات غیرمستقیم (به عنوان مثال، زمانی که دستگاه را با برنامه در حال اجرا قفل می کنید)
- اجرا نشدن: برنامه خاتمه یافته یا شروع نشده است
این سردرگمی زمانی ایجاد می شود که برنامه به پس زمینه می رود تا مزاحم نشود. هنگامی که دکمه Home را فشار می دهید یا از ژست برای بستن برنامه (iPad) استفاده می کنید، برنامه به پس زمینه می رود. اکثر برنامهها در عرض چند ثانیه به حالت تعلیق در میآیند (آنها در رم iDevice ذخیره میشوند تا بتوانند به سرعت راهاندازی شوند، پردازنده را به اندازه کافی بارگیری نمیکنند و در نتیجه عمر باتری را ذخیره نمیکنند) ممکن است فکر کنید که اگر یک برنامه به استفاده از حافظه ادامه دهد، به صورت دستی آن را حذف کنید تا آزاد شود. اما لازم نیست این کار را انجام دهید، زیرا iOS این کار را برای شما انجام خواهد داد. اگر برنامهای دارید که در پسزمینه به حالت تعلیق درآمده است، مانند بازیای که از مقدار زیادی رم استفاده میکند، iOS بهطور خودکار آن را در صورت لزوم از حافظه حذف میکند و میتوانید با ضربه زدن روی نماد برنامه آن را راهاندازی مجدد کنید.
هیچ یک از این حالتها در نوار چندوظیفهای منعکس نمیشود، نوار فقط فهرستی از برنامههای اخیراً راهاندازی شده را بدون توجه به توقف، توقف موقت یا اجرای برنامه در پسزمینه نشان میدهد. همچنین ممکن است متوجه شوید که برنامه ای که در حال حاضر در حال اجرا است در پنل Multitasking ظاهر نمی شود
وظایف پس زمینه
به طور معمول، زمانی که دکمه Home را فشار می دهید، برنامه در پس زمینه اجرا می شود و اگر از آن استفاده نمی کنید، به طور خودکار در عرض پنج ثانیه متوقف می شود. بنابراین اگر به عنوان مثال در حال دانلود یک پادکست هستید، سیستم آن را به عنوان یک برنامه در حال اجرا ارزیابی می کند و پایان کار را ده دقیقه به تاخیر می اندازد. حداکثر پس از ده دقیقه، فرآیند از حافظه خارج می شود. به طور خلاصه، اگر تکمیل آن بیش از 10 دقیقه طول نکشید، لازم نیست نگران دانلود خود با فشار دادن دکمه Home باشید.
در حال اجرا نامحدود در پس زمینه
در صورت عدم فعاليت، سيستم ظرف مدت پنج ثانيه برنامه را خاتمه ميدهد و در صورت دانلود، ده دقيقه به تأخير ميافتد. با این حال، تعداد کمی از برنامه ها وجود دارند که نیاز به اجرا در پس زمینه دارند. در اینجا چند نمونه از برنامه هایی که می توانند در پس زمینه به طور نامحدود در iOS 5 اجرا شوند آورده شده است:
- برنامه هایی که صدا پخش می کنند و باید برای مدتی قطع شوند (مکث موسیقی در حین تماس تلفنی و غیره)،
- برنامه هایی که موقعیت مکانی شما را ردیابی می کنند (نرم افزار ناوبری)،
- برنامههایی که تماسهای VoIP را دریافت میکنند، برای مثال اگر از اسکایپ استفاده میکنید، حتی زمانی که برنامه در پسزمینه است، میتوانید تماس دریافت کنید.
- دانلود خودکار (به عنوان مثال دکه روزنامه فروشی).
همه برنامه ها باید بسته شوند اگر دیگر وظیفه ای را انجام نمی دهند (مانند دانلودهای پس زمینه). با این حال، استثناهایی وجود دارد که به طور مداوم در پس زمینه اجرا می شوند، مانند برنامه اصلی Mail. اگر در پسزمینه کار میکنند، حافظه، مصرف CPU را اشغال میکنند یا عمر باتری را کاهش میدهند
برنامههایی که اجازه دارند بهطور نامحدود در پسزمینه اجرا شوند، میتوانند در حین اجرا هر کاری را انجام دهند، از پخش موسیقی گرفته تا دانلود قسمتهای جدید پادکست.
همانطور که قبلاً اشاره کردم، کاربر هرگز نیازی به بستن برنامه های در حال اجرا در پس زمینه ندارد. تنها استثنا در این مورد زمانی است که اپلیکیشنی که در پسزمینه اجرا میشود از کار میافتد یا به درستی از خواب بیدار نمیشود. سپس کاربر می تواند برنامه ها را به صورت دستی در نوار چندوظیفه ای ببندد، اما این به ندرت اتفاق می افتد.
بنابراین، به طور کلی، شما نیازی به مدیریت فرآیندهای پس زمینه ندارید، زیرا سیستم خود از آنها مراقبت می کند. به همین دلیل است که iOS یک سیستم جدید و سریع است.
از دیدگاه یک توسعه دهنده
برنامه می تواند در مجموع با شش حالت مختلف به عنوان بخشی از چند وظیفه ای واکنش نشان دهد:
1. applicationWillResignActive
در ترجمه، این حالت به این معنی است که برنامه در آینده (در حد چند میلی ثانیه) از برنامه فعال بودن (یعنی برنامه در پیش زمینه) کناره گیری می کند. این اتفاق می افتد مثلاً هنگام دریافت تماس در حین استفاده از برنامه، اما در عین حال این روش قبل از رفتن برنامه به پس زمینه این حالت را نیز ایجاد می کند، بنابراین باید این تغییرات را در نظر بگیرید. این روش همچنین مناسب است که مثلاً در صورت وجود تماس ورودی، تمام فعالیت هایی را که انجام می دهد به حالت تعلیق در می آورد و تا پایان تماس منتظر می ماند.
2. applicationDidEnterBackground
وضعیت نشان می دهد که برنامه به پس زمینه رفته است. توسعهدهندگان باید از این روش برای تعلیق تمام فرآیندهایی که لزوماً نیازی به اجرا در پسزمینه ندارند استفاده کنند و حافظه را از دادههای استفاده نشده و سایر فرآیندها پاک کنند، مانند تایمرهای منقضی، پاک کردن تصاویر بارگذاری شده از حافظه که لزوماً نیازی به آنها نیست، یا بسته شدن اتصالات با سرورها، مگر اینکه تکمیل اتصالات در پس زمینه برای برنامه حیاتی باشد. هنگامی که متد در برنامه فراخوانی می شود، اساساً باید از آن برای تعلیق کامل برنامه استفاده شود، اگر بخشی از آن لازم نیست در پس زمینه اجرا شود.
3. applicationWillEnterForeground
این حالت برعکس حالت اول است که در آن برنامه به حالت فعال می رود. وضعیت به سادگی به این معنی است که برنامه خواب از پس زمینه از سر گرفته می شود و در چند میلی ثانیه آینده در پیش زمینه ظاهر می شود. توسعه دهندگان باید از این روش برای از سرگیری فرآیندهایی که در زمانی که برنامه در پسزمینه بود غیرفعال بودند استفاده کنند. اتصالات به سرورها باید دوباره برقرار شوند، تایمرها بازنشانی شوند، تصاویر و داده ها در حافظه بارگذاری شوند، و سایر فرآیندهای ضروری می توانند درست قبل از اینکه کاربر برنامه بارگذاری شده را دوباره ببیند، از سر گرفته شوند.
4. applicationDidBecomeActive
وضعیت نشان می دهد که برنامه به تازگی پس از بازیابی به پیش زمینه فعال شده است. این روشی است که می توان از آن برای انجام تنظیمات اضافی در رابط کاربری یا بازگرداندن رابط کاربری به حالت اولیه و غیره استفاده کرد. این در واقع در لحظه ای اتفاق می افتد که کاربر قبلاً برنامه را روی صفحه نمایش می بیند، بنابراین لازم است با احتیاط مشخص کنید که در روش این و در روش قبلی چه اتفاقی می افتد. آنها یکی پس از دیگری با اختلاف چند میلی ثانیه نامیده می شوند.
5. applicationWill Terminate
این حالت چند میلی ثانیه قبل از خروج برنامه اتفاق می افتد، یعنی قبل از اینکه برنامه واقعاً خاتمه یابد. یا به صورت دستی از چند کار یا هنگام خاموش کردن دستگاه. این روش باید برای ذخیره دادههای پردازش شده، پایان دادن به همه فعالیتها و حذف دادههایی که دیگر مورد نیاز نیستند استفاده شود.
6. applicationDidReceiveMemoryWarning
این آخرین حالتی است که بیشتر مورد بحث قرار گرفته است. در صورت لزوم، مسئول حذف برنامه از حافظه iOS در صورت استفاده غیر ضروری از منابع سیستم است. نمیدانم iOS با برنامههای پسزمینه چه میکند، اما اگر به برنامهای نیاز داشته باشد تا منابع را برای پردازشهای دیگر آزاد کند، با یک هشدار حافظه از آن میخواهد که منابعی را که دارد آزاد کند. بنابراین این روش در برنامه نامیده می شود. توسعه دهندگان باید آن را پیاده سازی کنند تا برنامه از حافظه ای که اختصاص داده است صرف نظر کند، همه چیز در حال انجام را ذخیره کند، داده های غیر ضروری را از حافظه پاک کند و در غیر این صورت به اندازه کافی حافظه را آزاد کند. درست است که بسیاری از توسعه دهندگان، حتی مبتدیان، به چنین چیزهایی فکر نمی کنند یا نمی فهمند، و سپس ممکن است برنامه آنها عمر باتری را تهدید کند و/یا منابع سیستم را بی دلیل، حتی در پس زمینه، مصرف کند.
حکم
این شش حالت و روشهای مرتبط با آنها، پسزمینه همه «چند وظیفهای» در iOS هستند. این یک سیستم عالی است، تا زمانی که توسعهدهندگان این واقعیت را نادیده نگیرند که باید در مورد آنچه برنامه روی دستگاههای کاربرانشان پرتاب میکند، در صورت به حداقل رساندن یا دریافت هشدار از سیستم و غیره، مسئولیت پذیر باشند.
منبع: macworld.com
نویسندگان: یاکوب پوژارک، مارتین دوبک (ArnieX)
آیا شما هم مشکلی برای حل دارید؟ آیا به مشاوره نیاز دارید یا شاید برنامه مناسب را پیدا کنید؟ در تماس با ما از طریق فرم موجود در بخش شک نکنید مشاوره، دفعه بعد به سوال شما پاسخ خواهیم داد.
سلام، مقاله واقعا جالبی است، اما نمیدانم که آیا پشتیبانی فنی برای آن دارید؟ چون من چند بار شب قبل از خواب باطری را حل کرده ام و اتفاق افتاده که با وای فای و دیتای موبایل خاموش، بیشتر از یک مورد دیگر با وای فای خاموش و فقط 3G طول کشیده است.
متأسفانه، تجربه این است که در iOS، برنامه ها باید به صورت دستی خاموش شوند و سیستم دیگر مانند قبل کار نمی کند.
من آیفون خود را با یک ویندوز فون (Samsung Omnia W برای 6200,-) جایگزین کردم و سرعت سیستم در سطح کاملاً متفاوتی است.
میترسم وقتی تبلت های مترو ویندوز 8 بیاد آیپد رو هم عوض کنم...
007 @ - بله، اگر iPhone3Gهای قدیمی را با مدلهای WP جدید مقایسه می کنید، بله (چه کسی این انتظار را داشت؟) WP کمی سریعتر خواهد بود. وگرنه شایعات در مورد کارلولکا به درد شما نمی خورد و مناسب بود که HW فعلی را با هم مقایسه کنید. من همچنین WP7 را خریدم و در نهایت به 4s رسیدم که سطح کاربری کاملاً متفاوتی را نسبت به WP7 نشان می دهد. پس به صورت دلپذیر و بی پایان از میان کاشی ها عبور کنید.
من کاملا با پاجا موافقم
من دوباره از زباله های یک بشکه دیگر کمک می کنم - سامسونگ گلکسی اس و آیفون 4 - می توانم بگویم از نظر سنی قابل مقایسه هستند؟ در زمان ios 4 و از نظر کاربرد و سرعت در جایی غیر از اندروید، اپل مفهوم کار با اپلیکیشن ها را خیلی خوب حل کرده است، اما در اندروید دیگر این موضوع صدق نمی کند. در نهایت من به هر حال به 4S رسیدم و هیچ شکایتی ندارم، زیرا "فقط کار می کند" .. و خیلی سریع کار می کند!
تئوری زیباست... اما در عمل باز هم برنامه را در نوار میبندم ;)
با تشکر، بسیار جالب، عملی، جالب، بدون نوسان و عمق نیست. تاکید قابل توجهی بر وسواس جوانان امروزی نسبت به این برند ممنوع! اما از او و همچنین برای این مقاله تشکر می کنم.
مقاله کاملا اشتباه است.
همانطور که به اشتباه گفته شد، با فشار دادن دکمه Home، برنامه خارج نمی شود، اما مکث می کند. یعنی قطعا از حافظه حذف نکنید و دست از کار نکشید. فقط اجرای را متوقف کنید، iOS به این برنامه 0% زمان CPU می دهد. همانطور که در مقاله گفته شد قطعاً در هیچ کجای حافظه iDevice "تبادل" نمی شود. این واقعاً به لطف این واقعیت است که امکان استفاده از تغییر برنامه وجود دارد.
هنگامی که گوشی حافظه کمی برای اجرای برنامه های دیگر با اولویت بالاتر دارد (معمولاً برنامه دیگری در پیش زمینه اجرا می شود) برنامه از حافظه حذف می شود.
در مورد اول حق با شماست، اشتباه ترجمه بود. در مورد تعویض، ما در اینجا در مورد آن صحبت نمی کنیم، ما در مورد حافظه عامل صحبت می کنیم، نه فضای ذخیره سازی در دستگاه iOS.
تصویر برنامه برای مدت محدودی در حافظه ذخیره می شود تا زمانی که دوباره با یک فرمان فراخوانی شود (به 13,7 گیگابایت از 16 گیگابایت مراجعه کنید: 2,3 گیگابایت برای سیستم و تعلیق برنامه رزرو شده است)
بنابراین، باید بین برنامه هایی مانند Navigation، Skype و موارد مشابه تمایز قائل شد، این برنامه ها حتی در پس زمینه فعال می مانند یا یک عملکرد خاص به پایان نمی رسد و به عنوان مثال به ارسال اطلاعات مربوط به مکان یا اطلاعات مکان خود ادامه می دهد. یا مانند Vokul در حالت پورد، گوش دادن و مولتی تسکینگ همچنان در پسزمینه گوش میدهد.
این اپلیکیشن ها باتری را خالی می کنند و لازم است آنها را به صورت دستی ببندید و منتظر iOS نمانید. با سایرین لازم نیست، فقط در صورتی که برنامه خراب شود.
من نمی توانم با مقاله موافق باشم. حداقل در یک iPad نسل اول (iOS 1) مشخص است که آیا تعداد زیادی برنامه "باز" در نوار چند وظیفه ای دارم یا فقط تعداد کمی از آنها. iOS سعی می کند حافظه را پاک کند، اما واضح است که کافی نیست - اندازه کوچک رم احتمالا بزرگترین ضعف آن است.
بنابراین خیلی به سیستم و سخت افزار استفاده شده بستگی دارد، کاملاً منطقی است که در iPad 1 با iOS 5.0.1 بدتر از iPad نسل دوم باشد.
متاسفم رفیق، این توصیفی از روش ایده آلی است که باید کار کند. متأسفانه، واقعیت کاملاً متفاوت است و اگر از محصولات اپل، حداقل به اندازه من (یعنی گاهی اوقات) استفاده میکردید، متوجه میشوید.
"شما اغلب می توانید خرافات را بشنوید که برنامه هایی که در پس زمینه در iOS اجرا می شوند، حافظه عامل را پر می کنند."
این یک خرافات نیست، فقط یک واقعیت است. پس از همه، شما خودتان آن را در مقاله ادعا می کنید.
همانطور که قبلاً اشاره کردم، کاربر هرگز نیازی به بستن برنامه های در حال اجرا در پس زمینه ندارد.
مزخرف. این فقط مزخرف است، تبلیغات سیب، از دست من عصبانی نشو.
اما شما مجبور نیستید این کار را انجام دهید، زیرا iOS این کار را برای شما انجام خواهد داد. اگر برنامهای دارید که در پسزمینه به حالت تعلیق درآمده است، مانند بازیای که از مقدار زیادی رم استفاده میکند، iOS بهطور خودکار آن را در صورت لزوم از حافظه حذف میکند و میتوانید با ضربه زدن روی نماد برنامه، آن را مجددا راهاندازی کنید.
درست نیست. وضعیت کمی متفاوت است. یک مثال معمولی - من برنامههای سختگیرانهای دارم که در پسزمینه اجرا میشوند، به بازیها نیاز دارم. من مرورگر را راه اندازی می کنم، چند برگه را باز می کنم -> به حافظه بیشتری نیاز دارم. چه اتفاقی خواهد افتاد؟ من به برنامه های کاربردی در پس زمینه ادامه می دهم، برعکس، خود مرورگر سقوط می کند. اگر برنامه های درخواستی را به صورت دستی ببندم، مرورگر برای مدت طولانی بدون هیچ مشکلی کار می کند.
این عمل است نه تئوری. و من تعجب می کنم که به عنوان یک کاربر طولانی مدت از یک محصول اپل، هنوز این را نمی دانید.
با تشکر، این بسیار خوب توضیح داده شده و به خوبی توضیح داده شده است. شما خیلی به من کمک کردید ;-) ♥
فقط برای شروع، من نه موافق و نه مخالف iOS هستم، درست مانند اندروید، اما چند چیز عجیب در اینجا وجود دارد، اگر همانطور که در اینجا نوشته شده است: "شما به ندرت با خرابی برنامه با iOS مواجه می شوید"، سپس با خراب شدن برنامه های اندرویدی حدود یک بار در سال: -P
http://dotekomanie.blog.mobilmania.cz/2012/02/stabilita-ios-vs-android/
بله، اما مواردی که باید برنامه را به صورت دستی ببندید واقعاً حداقل است، من تقریباً یک بار از آن استفاده کردم؟ ;-) و دادن لینک به تست مقایسه ای از Mobilemania کاملا بی معنی است، وقتی می خواهم در مورد تبلیغاتی که گوگل پرداخت کرده بخوانم، آنجا را نگاه می کنم ;-) همه می توانند هر گوشی اندرویدی را در دست داشته باشند و آن را به طور تمیز اجرا نمی شود، یعنی به استثنای Galaxy Nexus که سیستم کم و بیش سفارشی است. در کل اندروید یک فاجعه است
@Mek – من چندین سال است که روزانه از محصولات اپل استفاده می کنم و این هرگز برای من اتفاق نیفتاده است، بنابراین نظریه شما به نوعی کار نمی کند.
علف هرز:
@redakce – می بینید که وب سایت دائماً در حال کار است یا اتفاقی با آن می افتد، اما من این احساس را دارم که یک هفته طول نمی کشد تا همه چیز آنطور که باید کار کند. و من واقعاً دیگر اینجا نمی آیم، زیرا ظاهر جدید برای من مناسب نیست. حداقل من از نسخه موبایل در آیفون استفاده کردم، اما الان اصلا کار نمی کند - چطور؟ آنها در حال حاضر به پست های موجود در نظرات پاسخ نمی دهند.
@SteveJSF متاسفانه، همه چیز همیشه آنطور که ما می خواهیم پیش نمی رود. در مورد پاسخ ها، افزونه جدید سئو آنها را شکست، در حال حاضر در حال حل شدن است.
WP-Touch نیز به دلایلی سرویس ما را خاتمه داد، بنابراین تصمیم گرفتیم راه حلی بهتر از این افزونه ارائه دهیم. بنابراین می توانید به زودی منتظر اخبار بعدی باشید :-)
مقاله خوبی تا جایی که به تمرین مربوط می شود، می خواهم بگویم که من با چند چیز موافقم و اکثر اوقات همانطور که گفته شد کار می کند، اما متاسفانه هنوز برنامه های ضعیف نوشته شده ای وجود دارد که درست عمل نمی کند و پس از آن مواردی مانند مورد وجود دارد. توسط برخی از خوانندگان ذکر شده است. فکر میکنم اسکایپ یک مثال بسیار خوب است، من از روی تمرین میدانم که هنوز در پسزمینه اجرا میشود (و خوب است و باید همینطور باشد)، اما مشکل اینجاست که این برنامه باتری دستگاه را بسیار خالی میکند و دیگه نمیتونم درست ببینمش برعکس، اپلیکیشن هایی مانند فیسبوک، بادو و غیره. آنها همچنین هنوز در پس زمینه در حال اجرا هستند، اما مصرف آنها تقریبا نامحسوس است (حداقل من متوجه نمی شوم). بنابراین من فکر می کنم خطا در برنامه های جداگانه است. اگر می دانستید کدام یک، کافی بود فقط آن ها را به صورت دستی خاموش کنید!
بنابراین عمل این است که فیس بوک در صورت نیاز و اسکایپ فقط در صورت نیاز اجرا می شود.
خوب، از طرف دیگر، اگر من نیاز به صرفه جویی در باتری داشته باشم و بدانم که باید آیفون را تا زمانی که ممکن است "زنده" نگه دارم، در مالتی تسکینگ همه چیز غیر ضروری را نیز خاموش می کنم، اما عمدتاً تأثیر زیادی ندارد. اما در صورت لزوم، 3G، تمام اینترنت همراه، WiFi، خدمات مکان، حالت هواپیما، قدرت نور و غیره را محدود میکنم.
بنابراین شخصا فکر می کنم مقاله درست است، متاسفانه برخی از برنامه نویسان این موارد را با برنامه های خود رد می کنند، زیرا برنامه های آنها نادرست است و به نظر من فقط دو راه حل برای این وجود دارد 1. اگر امکان دارد از برنامه استفاده نکنید و یک برنامه پیدا کنید. در صورت امکان جایگزین، یا 2. اگر امکان پذیر نیست، به عنوان مثال به اسکایپ مراجعه کنید، آن را برای برنامه نویس داده شده در گزارش بنویسید و امیدوار باشید که آنها کاری در مورد آن انجام دهند.
ممکن است غیرفعال کردن دستی برنامه ها بی معنی باشد، اما به هر حال من این کار را انجام می دهم. من هم سعی کردم سیستم برنامه را خاموش نکنم، بگذارم اجرا شوند (یا آنها را در پس زمینه بخوابانند) و عمر باتری بسیار کمتر بود، همچنین لازم بود آیپد 2 را بعد از حدود سه هفته مجدداً راه اندازی کنم، به آرامی پاسخ داد. بنابراین من برنامه ها را به صورت دستی خاموش می کنم، باتری بیشتر دوام می آورد، اخیراً در روز کریسمس راه اندازی مجدد کردم و به خوبی کار می کند.
در ضمن، من همین کار را در Mac OS X انجام می دهم، فقط برنامه ای را که به آن نیاز ندارم (CMD+Q) می بندم، بهتر از این است که در پس زمینه بخوابد و بی جهت رم بخورد (که OS X می تواند. خیلی خوب کار می کند). من رم کمی دارم، فقط 8 گیگابایت، اما در ویندوز 7 با 8 گیگابایت، سیستم به کندی پاسخ نمی دهد یا تعویض نمی کند، در OS X این یک پدیده نسبتاً رایج است (من هرگز رایانه را خاموش نکردم، من این کار را با مک نیز انجام می دهم. بنابراین یک ماه و زمان بیشتر از این قاعده مستثنی نیست، مشکل این است که گاهی اوقات برای احتیاط مجبور می شوم مک را مجدداً راه اندازی کنم تا RAM را آزاد کنم و "سرعت" را افزایش دهم، ویندوز 7 به این نیاز ندارد).
من بیشتر به نحوه انفجار برنامه علاقه مند هستم. اتفاقی که برای من افتاد این بود که برنامه (مخصوصاً در Geocaching) در حالتی قرار گرفت که در حال بارگذاری چیزی از سرور والد بود و در آن حالت گیر کرد. دکمه Home کار کرد، پس از راه اندازی مجدد به حالت یخ زده (جایی که من آن را ترک کردم) بازگشت. خروج دستی (به منوی چند طعم، نماد و منهای را نگه دارید تا بسته شود) = برنامه ناپدید شد، پس از راه اندازی مجدد، در حالت اولیه خود باز شد و در آنجا یخ زد. بنابراین همه چیز را بستم، تلفن را خاموش کردم، آن را روشن کردم، روی HOME دوبار کلیک کردم و دیدم - همه برنامه ها همان طور که قبل از بسته شدن بودند، درست قبل از خاموش شدن، آنجا بودند. راه اندازی مجدد نیز کمکی نکرد - خانه و بالا را نگه دارید تا گرم شود. تنها چیزی که کمک کرد حذف برنامه از گوشی، راه اندازی مجدد و نصب مجدد آن بر روی گوشی بود. یه جورایی نگرفتم
این مدیریت چند وظیفه ای کار می کند و این به توسعه دهندگان بستگی دارد که با این شرایط کنار بیایند. برای کسانی که علاقه مند به شرح دقیق تر و حرفه ای تر از کل وضعیت هستند، در اینجا می نویسم که چگونه است.
این برنامه می تواند در مجموع به 6 حالت پاسخ دهد که این حالت ها عبارتند از:
applicationWillResignActive
applicationDidEnterBackground
applicationWillEnterForeground
applicationDidBecomeActive
برنامه خاتمه می یابد
applicationDidReceiveMemoryWarning
اکنون سعی می کنم این حالت ها را با جزئیات بیشتری شرح دهم.
applicationWillResignActive - این وضعیت به این معنی است که در آینده (چند میلی ثانیه) برنامه به عنوان یک برنامه فعال (یعنی برنامه در پیش زمینه) استعفا می دهد، به عنوان مثال هنگام دریافت تماس در حین استفاده از برنامه، اما در همان زمان اتفاق می افتد. زمانی که این روش حتی قبل از رفتن برنامه به پسزمینه فعال میشود، بنابراین باید این تغییرات را در نظر بگیرید. این روش همچنین مناسب است که مثلاً در صورت وجود تماس ورودی، تمام فعالیت هایی را که انجام می دهد به حالت تعلیق در می آورد و تا پایان تماس منتظر می ماند.
applicationDidEnterBackground - این وضعیت نشان می دهد که برنامه وارد پس زمینه شده است، توسعه دهندگان باید از این روش برای تعلیق تمام فرآیندهایی که لزوماً نیازی به اجرا در پس زمینه ندارند و پاک کردن حافظه از داده های استفاده نشده و سایر فرآیندها استفاده کنند، به عنوان مثال، تایمرهای منقضی، پاک کردن از تصاویر بارگذاری شده در حافظه که لزوماً مورد نیاز نیستند یا اتصال با سرورها را قطع می کنند، اگر تکمیل اتصال در پس زمینه برای برنامه حیاتی نباشد. اساساً این روش هنگام فراخوانی در برنامه باید برای تعلیق کامل برنامه در صورتی که نیازی به اجرای بخشی از آن در پسزمینه نباشد استفاده شود.
applicationWillEnterForeground – این حالت برعکس حالت اول است که برنامه به حالت فعال تسلیم می شود. این حالت برنامه به سادگی به این معنی است که در چند میلی ثانیه آینده برنامه خواب از پس زمینه از سر گرفته می شود و در پیش زمینه ظاهر می شود (برنامه وارد پیش زمینه می شود)، این روش باید توسط توسعه دهندگان برای از سرگیری هر فرآیندی که در زمانی که برنامه غیرفعال بوده است استفاده شود. در پسزمینه، اتصالات به سرورها باید دوباره برقرار شوند، تایمرها بازنشانی شوند، تصاویر و دادهها در حافظه بارگذاری شوند، و سایر فرآیندهای ضروری میتوانند درست قبل از اینکه کاربر برنامه بارگذاری شده را دوباره ببیند، از سر گرفته شود.
applicationDidBecomeActive - این وضعیت نشان می دهد که برنامه به تازگی پس از بازگردانی به پیش زمینه فعال شده است، این روشی است که می توان از آن برای ایجاد تنظیمات اضافی در رابط کاربری یا بازگرداندن رابط کاربری به حالت اولیه و غیره استفاده کرد. این روش در واقع اتفاق می افتد. زمانی که کاربر از قبل می تواند روی صفحه نمایش ببیند، بنابراین باید از ترازنامه مشخص کرد که در این روش و در روش قبلی چه اتفاقی می افتد. آنها یکی پس از دیگری با اختلاف چند میلی ثانیه نامیده می شوند.
applicationWillTerminate - این حالت چند میلی ثانیه قبل از پایان برنامه اتفاق می افتد، یعنی قبل از اینکه برنامه واقعاً خاتمه یابد. یا به صورت دستی از چند کار یا هنگام خاموش کردن دستگاه. این روش باید برای ذخیره داده های پردازش شده و پایان دادن به تمام فعالیت ها و حذف داده هایی که دیگر مورد نیاز نیستند استفاده شود.
applicationDidReceiveMemoryWarning - و این شرایطی است که در اینجا بسیار مورد بحث قرار گرفته است، در صورت لزوم، iOS برنامه را در صورت استفاده غیر ضروری از منابع سیستم از حافظه حذف می کند. من دقیقا نمیدانم iOS با برنامههای پسزمینه چه میکند، اما اگر به برنامهای نیاز داشته باشد تا منابع را برای پردازشهای دیگر آزاد کند، با یک هشدار حافظه از آن میخواهد که منابعی را که در اختیار دارد آزاد کند. بنابراین این روش در برنامه فراخوانی می شود و توسعه دهندگان باید آن را پیاده سازی کنند تا برنامه از حافظه ای که دارد صرف نظر کند، پردازش شده را ذخیره کند و داده های غیر ضروری را از حافظه حذف کند و در غیر این صورت به اندازه کافی حافظه را آزاد کند. درست است که بسیاری از توسعه دهندگان، به عنوان مثال مبتدیان، به چنین چیزهایی فکر نمی کنند یا آنها را درک نمی کنند، و سپس ممکن است برنامه آنها عمر باتری را به خطر بیندازد و/یا منابع سیستم را حتی در پس زمینه به طور غیر ضروری مصرف کند. اگر برنامه پس از دریافت اخطار حافظه کاری انجام ندهد و مانند قبل به مصرف منابع سیستم ادامه دهد، نمیدانم iOS چگونه رفتار خواهد کرد.
این چند حالت و روشهای مرتبط پشت کل «چند وظیفهای» در iOS هستند... اگر توسعهدهندگان نیاز به مسئولیتپذیری در مورد آنچه برنامهها در صورت به حداقل رساندن برنامهها روی دستگاههای کاربرانشان پرتاب میکنند را نادیده نگیرند، یک سیستم عالی است. یا دریافت هشدار از سیستم و موارد دیگر…
امیدوارم این توضیح مختصر به شما کمک کند بفهمید که چگونه برنامه در ایجاد همه چیز به خوبی کار می کند. بنابراین تقریباً می توان گفت که اشتباه استفاده نادرست توسط کاربر است، که می تواند به این صورت درک شود - اگر از برنامه های عمدتاً رایگان توسعه دهندگان آماتور به تعداد زیاد استفاده کنید، دستگاه iOS شما بدتر از زمانی است که از یک برنامه بزرگ استفاده کنید. تعداد برنامه های رایگان و پولی از توسعه دهندگان با تجربه یا حرفه ای. این بدان معنا نیست که هیچ استثنایی در هر دو دایره وجود ندارد. به عنوان مثال، چهارسکوئر کاملاً عجیب و سخت رفتار می کند و در عین حال می توان انتظار داشت که آنها توسعه دهندگان بسیار ماهری هستند که زمان زیادی برای مدیریت حافظه و باتری می گذارند، اما برعکس است. بزرگترین مشکل 4SQ ارتباط با سرورها است که اغلب هنگ می کند و غرق می شود. این فقط یک نمونه از این واقعیت است که حتی برنامه های شناخته شده نیز مشکلاتی دارند، که این واقعیت را تغییر نمی دهد که 4SQ یک سرویس عالی است.
از آن لذت ببرید سیب! :)
ما اطلاعات را با اجازه نویسنده به مقاله اضافه کردیم ;-)
متأسفم، ENTER همه جا بین پاراگراف ها بود، آنها می توانند در اینجا کاری در مورد آن انجام دهند تا نظرات حداقل کمی از RICH TEXT FORMATING داشته باشند.
ArnieX: با تشکر از نظر!!
به فرامیر: من فقط در مورد مشکل شما هستم، نمی دانم در مورد شما کمکی می کند یا نه، اما از تجربه خودم می دانم که اگر برنامه را ببندید (در چند وظیفه) چند ثانیه طول می کشد تا بسته شود، بنابراین اگر شما آن را خاموش کنید، توصیه می کنم چند ثانیه صبر کنید (برای اطمینان، تقریباً 10 ثانیه صبر می کنم) تا قطعاً تمام شود و فقط بعد از آن دوباره آن را شروع می کنم.
شما خوش آمدید ;) اگر فرصتی برای مشارکت داشته باشم خوشحال می شوم کمک کنم.
قراره با میب چطور باشه وقتی از طریقش وارد چت ICQ یا FB میشم بعد از 10 دقیقه خود به خود لاگ اوت میشه و آفلاین میشم یا به کارش ادامه میده؟ ممنون از توضیح :P
پس از ده دقیقه اتصال برنامه به اینترنت به سادگی قطع می شود. با این حال، شما همچنان در سرور میبا آنلاین خواهید بود و اگر کسی برای شما نامه نوشت، یک اعلان فشار دریافت خواهید کرد. پس از باز کردن مجدد برنامه، در یک لحظه اتصال برقرار می شود و می توانید با خوشحالی به چت ادامه دهید.
بنابراین، اگر مقالهای را که لینک کردهاید به درستی متوجه شده باشم، آمار فقط به خرابی برنامهها در زمان شروع اشاره دارد، که درصد نسبتاً کمی از مواردی است که ممکن است خرابی رخ دهد. بنابراین، از این "تحقیق" نمی توان نتیجه گرفت که iOS به نظر من از ثبات کمتری برخوردار است. علاوه بر این، مترجم مقاله برگرفته از فوربس فراموش کرده است که ذکر کند شرکتی که دادههای مربوط به خرابی برنامهها را ارائه میدهد، از جمله توسط Google پشتیبانی میشود ("Crittercism، که توسط Google Ventures پشتیبانی میشود،...").