رفتن به مطلب
  • 0

مدیریت بهینه رم دستگاه برای جلوگیری از گیرکردن برنامه


ali8008

سوال

سلام دوستان ، خسته نباشید

یه سوال فنی داشتم و اون اینه که به طور کلی چه طوری میتونیم در برنامه هامون استفاده از رم دستگاه رو کمتر بکنیم؟

مثلا وقتی میخوایم یه اکتیویتی جدید رو باز کنیم ، قبلی رو کامل ببندیم (دیگه توی backStack نره)

این مسئله بسایر مهم و حائز اهمیته پس لطفا تجربیات خودتون رو از دیگران دریغ نکنید. *ناز2*

با تشکر فراوان *قلب**قلب**قلب*

لینک ارسال
به اشتراک گذاری در سایت های دیگر

8 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

با سلام

خداییش دیگه خسته شده بودم حتی طی تماسی که با erel داشتم هم نتونستم مشکل کرش برناممو درستش کنم چون حدود 100 تا اکتویتی دارم و 50 تا عکس بعد دیدن 4 تا عکس برنامه زود down میکرد ولی با استفاده از exitapplication به جای activity.finish مشکلم حل شد.

ali8008 دمت گرم داداش.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام

یه دوست در مورد این مطلب میگفت که با کد Activity.finish اکتیویتی بسته نمیشه و برنامه فضای رم رو آزاد نمیکنه و باید به جاش با یه ترفندی از ExitApplication استفاده کرد ،

حالا چجوری استفاده کرده که برنامه رو به طور کلی نبسته نمیدونم :o

شما میدونید؟؟؟؟؟؟؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام

یه دوست در مورد این مطلب میگفت که با کد Activity.finish اکتیویتی بسته نمیشه و برنامه فضای رم رو آزاد نمیکنه و باید به جاش با یه ترفندی از ExitApplication استفاده کرد ،

حالا چجوری استفاده کرده که برنامه رو به طور کلی نبسته نمیدونم :o

شما میدونید؟؟؟؟؟؟؟

دوست عزیز یک خورده اگه زبان انگلیستون قوی باشه معنی ExitApplication و Activity.finish رو میفهمید.

Activity.finish یعنی بستن اون اکتیویتی قبلی

ExitApplication یعنی کلا برنامه رو ببنده ! مگه ما میخواهیم وقتی از یک Activity رفتیم به Activity دوم کلا برنامه رو ببنده؟ *مکار*

مگه هرکی هرچی گفت شما باید باور کنید؟ *خوشمزه*

بهش بگید آموزشش رو تهییه کنه بنده میخرم ازش اگه واقعا بلده *همینه*

لینک ارسال
به اشتراک گذاری در سایت های دیگر

آقا مهدی زبان انگیلیسیم بدک نیست *عصبانی*

خودم روش کار کردم ترکیب کد هاش رو به سادگی پیدا کردم

اینم برای شما به صورت رایگان! :cool:: (این کد رو در Act1 بنویسید)

StartActivity(Act2)
   ExitApplication

خودتونم برید امتحان کنید ببینید درست کارمیکنه یا نه (یعنی آیا بر طبق گفته ی شما برنامه کاملا میبنده یا بدون مشکل وارد صفحه ی دوم میشه) *مکار*

لینک ارسال
به اشتراک گذاری در سایت های دیگر

آقا مهدی زبان انگیلیسیم بدک نیست *عصبانی*

خودم روش کار کردم ترکیب کد هاش رو به سادگی پیدا کردم

اینم برای شما به صورت رایگان! :cool:: (این کد رو در Act1 بنویسید)

StartActivity(Act2)
   ExitApplication

خودتونم برید امتحان کنید ببینید درست کارمیکنه یا نه (یعنی آیا بر طبق گفته ی شما برنامه کاملا میبنده یا بدون مشکل وارد صفحه ی دوم میشه) *مکار*

حالا من از شما یه سوال دارم به نظر شما با این کار داده متغیر هایی که در پروسس گلوبال تعریف میکنید از بین نمیره؟

حالا که زبان انگلیسیتون خوبه جواب این سوال هم بدید*باکلاس*

لینک ارسال
به اشتراک گذاری در سایت های دیگر

والا جواب این سوال دیگه نیاز به مهارت انگیلیسی نداره *خنده شیطان

چون در صورت مسئله جوابتون هست!!!

وقتی صورت سوال اینه که باید چی کار کنیم تا وقتی از یه اکتیویتی به یه اکتیویتی دیگه میریم، اکتیویتی مبدا توی BackStack نره و فضای رم رو اشغال نکنه به نظر شما قبلا متغییر های پروسس گلوبال تو هوا ذخیره میشدن؟؟؟

خوب عزیزم همین متغیر ها هستند که یه قسمت از فضای رم رو اشغال میکنن دیگه!!!

ما تو این تاپیک میخوایم یه امتیاز بدیم و چند امتیاز بگیریم به این صورت که به جای استفاده از متغییر های پروسس گلوبال مثلا برای نگهداری یا انتقال اطلاعات از Call Sub استفاده کنیم

(یعنی اطلاعاتی که میخوایم تو اکتیویتی مبدا داشته باشیم رو موقع رفتن، به اکتیویتی بعدی بفرستیم و در هنگام برگشت پسش بگیریم که به این روش ، جریان اطلاعات میگن و در مقابل روش سنتی انبار اطلاعات قرار میگیره و روش ابداعی خودم هست!)

در عوض فضای رم کمتر اشغال میشه و برنامه بدون لگ یا کرش کردن میتونه روی طیف وسیعی از گوشی ها با سخت افزار های مختلف اجرا بشه

سوال دیگه ای هست؟؟؟*همینه*

دوستان و اساتید لطفا نظراتتون رو در مورد روش "جریان اطلاعات" بنده بگید که اگه نقصی داره بر طرف کنیم *باکلاس*

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام

واقعا سوال بجا و خوبی بود

خب از اونجایی که میدونید سیستم عامل برای انجام هر پروسه میاد یک ادرس که مختص همون برنامه هست و توی پشته قرار میده و بعد میره به پردازش بعدی و به همین شکل توی پشته قرار میگیره که با انجام اخرین پروسه یکی یکی برمیگرده ( LIFO) ادرس های ذخیره شده رو فراخوانی میکنه و سیتخب چیزی که شما میخوایید اینه که با بستن اون اکتیویتی دیگه توی پشته قرار نگیره و انتظاری وجود نداشته باشه

خب چیزی که بنده توی بیسیک 4 آندروید در یافتم اینه که باید ویو هارو با کدنویسی قرار بدیم با قرار دادن شرط :

If FirstTime Then

و واسه از بین رفتن رم اشغالی باید اکتویتی باز ( Current Activity ) قبل از باز کردن اکتیویتی باید بسته شه:

Activity.Finish
StartActivity(Ac2)

خب یکسری نکات هم هست که نباید از تایمر واسه باز کردن اکتیویتی استفاده کنیم.یعنی نباید بیاییم Enabled یک تایمر رو در بلوک مربوط به شرط FirstTime قرار بدیم.

نکاتی که بنده الان حضور ذهن داشتم همین بود و قطعا راههای زیادی واسه این وجود داره تا بتوینیم در بهینه سازی رم اش استفاده کنیم

و امیدوارم اگه دوستان هم نکاته دیگه رو میدونن اینجا قرار بدن تا بتیونیم بهترین استفاده هارو ببریم

لینک ارسال
به اشتراک گذاری در سایت های دیگر

با تشکر از آقا مجید که چراغ اول رو روشن کردند ، یه نکته یادم اومد که بگم :

اگر از کد زیر برای رفتن به اکتیویتی بعدی استفاده کنیم:

Activity.Finish
StartActivity(Ac2)

در قسمت Log عبارت ** Activity (Ac1) Pause, UserClosed = false **

رو مشاهده میکنیم ولی اگر فقط از خط دوم کد برای رفتن به اکتیویتی بعدی استفاده کنیم

در قسمت Log عبارت ** Activity (Ac1) Pause, UserClosed = true **

رو خواهیم دید. پس حالا یعنی اگر UserClosed = false باشه دیگه اکتیویتی داخل BackStack نمیره و فضای رم رو اشغال نمیکنه

دوستان اگر در مورد بهینه سازی انیمیشن ها و گرافیک هم اطلاعی دارن لطفا بگن که استفاده کنیم *مرسی*

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...