PDA

View Full Version : پس گرفتن حافظه پس از استفاده منابع؟!



cccccccccc
یک شنبه 21 دی 1393, 04:54 صبح
سلام دوستان
توی برنامه به کاربر این انتخابو دادم که بک گروند صفحه اصلی رو تغییر بده، برای این کار به اکتیویتی 2 هدایت میشه، اونجا تصاویرو میبینه، همین که تصویرو میبینه حجم برنامه بالا میره و پس از خارج شدن از اکتیویتی 2 حافظه اشغالی تغییری نمیکنه!
؟!

jalil_gh
یک شنبه 21 دی 1393, 20:34 عصر
در حالت کلی سیستم اکتیویتی‌های باز شده رو تو حافظه نگه میداره و اگه نیاز شد اونا رو از حافظه خارج می‌کنه. در کل میگن که این کارار رو بسپارید به سیستم و شما غمتون نباشه.
ولی اگه می‌خوایید اکتیویتی رو ببندید میتونید تو متد onPuase اکتیویتی دوم متد ()finish رو فراخوانی کنید تا اکتیویتی بسته بشه.

smemamian
یک شنبه 21 دی 1393, 21:14 عصر
در حالت کلی سیستم اکتیویتی‌های باز شده رو تو حافظه نگه میداره و اگه نیاز شد اونا رو از حافظه خارج می‌کنه. در کل میگن که این کارار رو بسپارید به سیستم و شما غمتون نباشه.
ولی اگه می‌خوایید اکتیویتی رو ببندید میتونید تو متد onPuase اکتیویتی دوم متد ()finish رو فراخوانی کنید تا اکتیویتی بسته بشه.
سلام
در مورد مبحث اول شما دوست خوبم، باید به خاطر داشت که گاهی باید تصاویر رو مدیریت کرد. که برای این کار مقاله های مختلفی از سوی توسعه دهندگان ارائه شده که زحمتش به دوش خودتون :

http://developer.android.com/training/displaying-bitmaps/index.html

در مورد مبحث دوم شما دوست خوبم، این کار زیاد کاربر پسند نبوده و از لحاظ برنامه نویسی هم منظقی نیست.

---------
در مورد اینکه فضا آزاد نمیشه، GC گاهی وقت ها کند عمل می کنه برای اینکه سریع تر این عمل رو انجام بدین در تابع onDestroy ، شما می توانید ImageViewهای خودتون رو null کنید :

your_imageview.setImageDrawable(null);

cccccccccc
یک شنبه 21 دی 1393, 21:45 عصر
در حالت کلی سیستم اکتیویتی‌های باز شده رو تو حافظه نگه میداره و اگه نیاز شد اونا رو از حافظه خارج می‌کنه. در کل میگن که این کارار رو بسپارید به سیستم و شما غمتون نباشه.
برنامم 16 مگه، داخل صفحه دوم تا 60مگ میره!! غمم هست

ولی اگه می‌خوایید اکتیویتی رو ببندید میتونید تو متد onPuase اکتیویتی دوم متد ()finish رو فراخوانی کنید تا اکتیویتی بسته بشه.
فینیش زدم فضارو پس نمیده..

در مورد مبحث اول شما دوست خوبم، باید به خاطر داشت که گاهی باید تصاویر رو مدیریت کرد. که برای این کار مقاله های مختلفی از سوی توسعه دهندگان ارائه شده که زحمتش به دوش خودتون :

http://developer.android.com/trainin...aps/index.html (http://developer.android.com/training/displaying-bitmaps/index.html)
رزولوشن تصاویر اینقد بالا نیست که بیخود کاری بشه، ولی تعداد یخورده بالاس البته فقط میخوام نشونشون بدم و در نهایت از یه عکس استفاده کنم ولی همشونو تو حافظه نگه میداره

در مورد اینکه فضا آزاد نمیشه، GC گاهی وقت ها کند عمل می کنه برای اینکه سریع تر این عمل رو انجام بدین در تابع onDestroy ، شما می توانید ImageViewهای خودتون رو null کنید :



1
your_imageview.setImageDrawable(null);




gc رو هم فراخوانی میکنم ولی حجم همونه!!!!

smemamian
یک شنبه 21 دی 1393, 21:51 عصر
از روی گوشی، حافظه استفاده شده رو سنجش نکنید. از ابزارهای موجود استفاده کنید. گاهی در گوشی این مقادیر اشتباه هستن. گاهی هم روی مقادیر Freeze میشن.
اگر بازهم ابزارها همان مقدار رو نشون داد، اگر امکانش هست یک نمونه پروژه در همین پست تهیه کنید تا تست کنیم.

storm_saeed
یک شنبه 21 دی 1393, 22:16 عصر
سلام دوستان
توی برنامه به کاربر این انتخابو دادم که بک گروند صفحه اصلی رو تغییر بده، برای این کار به اکتیویتی 2 هدایت میشه، اونجا تصاویرو میبینه، همین که تصویرو میبینه حجم برنامه بالا میره و پس از خارج شدن از اکتیویتی 2 حافظه اشغالی تغییری نمیکنه!
؟!
میشه کدی که زدی رو قرار بدی ؟

درحالت کلی برای اینجور کارا بیت مپ ها رو از طریق LruCache کش میکنن همچنین strong refrences هم هست در ضمن میتونید کش لوکال درست کنید و موقع عوض شدن اکتیویتی ها از کش پاک میشن

cccccccccc
دوشنبه 22 دی 1393, 02:27 صبح
r.setOnTouchListener(new OnTouchListener()
{
public boolean onTouch(View v, MotionEvent me)
{
if (me.getAction() == MotionEvent.ACTION_DOWN)
{
x=(int) me.getRawX();
}
else if(me.getAction()==MotionEvent.ACTION_UP)
{
if(me.getRawX()>x+20)
{
Main.backidtemp++;
if(Main.backidtemp==12)
Main.backidtemp=1;
layoutbackset();
}
else if(me.getRawX()+20<x)
{
Main.backidtemp--;
if(Main.backidtemp==0)
Main.backidtemp=11;
layoutbackset();
}
}
return true;
}
});


void layoutbackset()
{
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN)
r.setBackgroundDrawable(getResources().getDrawable (getResources().
getIdentifier("drawable/back"+Main.backidtemp, "drawable", getPackageName())));
else
r.setBackground(getResources().getDrawable(getReso urces().
getIdentifier("drawable/back"+Main.backidtemp, "drawable", getPackageName())));
}





btnok.setOnClickListener(new OnClickListener() {
public void onClick(View arg0)
{
setResult(RESULT_OK);
finish();
}
});





دکمه کنسل و بک هم مثله ok