جلوگیری از خطای out of memory ، در برنامه نویسی اندروید
مدتی پیش، یک بازی اندروید ساخته بودم و آن را بر روی سه گوشی واقعی نیز تست کرده بودم. پس از انتشار بازی اندروید، یکی از کاربران گفته بود که در نیمه های بازی، با خطای force close روبرو می شود. موفق شدم یک گوشی تهیه کنم که همان خطا را ایجاد کند، نکته ای که جالب بود، این است که پس از یک بار force close ، دیگر با این پیام روبرو نمی شدیم. بنابراین می شد حدس زد که این خطا مربوط به out of memory است.
در بازی، من از انیمیشن های زیادی استفاده کرده بودم که در تعدادی ImageView نمایش داده می شدند. انیمیشن ها به صورت فریم به فریم بودند. در اینترنت برای پیدا کردن راه حل این مشکل جستجو کردم، ولی چون فکر می کردم که حتما روش نمایش انیمیشن مشکلی دارد، نتوانستم به راه حل مناسبی دست پیدا کنم و با امتحان کردن روش های پیشنهادی مختلف، مشاهده کردم که هیچکدام توانایی برطرف کردن این مشکل در بازی اندروید را ندارند. بالاخره متوجه شدم که راه حل، ربطی به نوع نمایش انیمیشن ها ندارد و می توان با یک خط کد، از ایجاد این خطا، جلوگیری نمود.
راه حل مشکل به این صورت است که ابتدا فایل AndroidManifest.xml از پروژه اندروید را باز کرده و سپس درون تگ application ، کد زیر را می نویسیم :
یعنی مثلا به صورت زیر :
android:debuggable="false"
android:largeHeap="true"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar" >
با نوشتن این یک خط کد، دیگر خطای مورد نظر، نمایش داده نشد. البته همیشه باید سعی کنید که برنامه، کمترین فضای ممکن را اشغال نماید و این نکته باید به عنوان گزینه دوم در نظر گرفته شود (اگر روش های معمول جواب نداد، این مورد را به کار ببرید).
در واقع، سیستم عامل اندروید، به هر یک از برنامه ها، یک مقدار مشخص حافظه می دهد (مثلا 16 مگابایت)، ولی با ذکر مشخصه مورد نظر، مقدار بیشتری حافظه (مثلا 24 مگابایت) را در اختیار برنامه اندروید قرار خواهد داد، بنابراین کمتر با خطای کمبود حافظه روبرو می شویم.
عالی بود، ممنوونم