آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

کلاس های Helper و نحوه استفاده از آن

علیرضا کامکار  9 سال پیش  9 سال پیش
+1 0

سلام خدمت همه دوستان عزیز و اساتید چند تا سوال داشتم به نظرم اومد اگه همش توی یه تایپیک باشه بهتر هستش برای همین همرو همینجا نوشتم .
سوال اولم اینه که کلاس های Helper چه کلاس هایی هستند ؟
سوال دوم این که آیا متدهایی که درون کلاس Helper هستند باید static باشند؟ (منظورم اینه که طبق قوانین OOP و این که کد بهتری داشته باشیم استفاده از static بهتر هست یا ساختن یک instance از هر کلاس و دسترسی به توابع داخل اون).
سوال سوم این که آیا استفاده زیاد از متغیرها و متدها به طور static باعث کند شدن و یا پایین اومدن performance میشه ؟ چون چند جا مطلبی در مورد حافظه ها خونده بودم و طبق صحبت هایی که با چند برنامه نویس داشتم بهم گفتند که بهتره زیاد از static استفاده نکنم .

و سوال آخر هم این که توی ورژن 2.2.2 اندروید استویدو وقتی که کلاس G رو میسازیم و درون اون context رو به صورت static تعریف میکنیم این warning به ما داده میشه که فکر میکنم بی ربط به سوال سومم نباشه. میخواستم بدونم این ارور برای چیه و راه حل صحیح برای حل این مشکل چیه.

Do not place android context classes in static fields; this is a memory leak (and also breaks Instant Run)

more : a static field will leak contexts

ببخشید اگه سوال هام زیاد شد d: ممنون از دوستان و اساتیدی که پاسخ میدن.

 برای این سوال 1 پاسخ وجود دارد. مشاهده پاسخ صحیح
پاسخ به سوال 
k112  9 سال پیش
+2 0

 پاسخ صحیح

با سلام

جواب اول :  در اصل یک نوع تکنیکه بنظر من , یه کار کلی هست یکبار برای همیشه (نه لزوما) و اینکه برای سادگی و جلوگیری از پیچیدگی میان بعضی کارهارو در قالب کلاس انجام میدن (اصل شی گرایی هم همینو میگه) مثل دیتابیس و فایل و غیره

جواب دوم : شما یکبار دیگه مبحث شی گرایی رو مرور کنید , استاتیک یعنی برای هر کلاس یک بار ایجاد میشه ولی نمونه سازی برای هر شی یک بار فضا میگیره ...

سوال سوم : منطق میگه نه (جواب کلی در اخر) ... ببینید هر کلاسی هم برای خودش حافظه میگیره و متغییرهای استاتیکش رو اونجا ذخیره میکنه ولی هر نمونه یک فضای جدا میگیره پس طبیعتا نباید از نظر کارایی برنامه مشکلی بوجود بیاد چرا که کلاس حافظه داره و دسترسی به اون فرقی با بقیه نداره ... پس ربطی به کارایی نداره

و سوال اخر: نکته تمام حرفهای بالا رو اینجا میگم که فرق اصلی متغییر استاتیک با غیر استاتیک اینکه که مثلا شی شما اگر از بین بره GarbageCollector اون رو پیدا کرده پاک میکنه ولی متغییر استاتیک هیچوقت پاک نمیشه!!! چون کلاس یک بار برای همیشه لود میشه! واسه همین پیشنهاد میده استفاده نکنی چون نشت حافظه بوجود میاد

موفق باشید

+2 0
در خصوص متغیر های static گوگل توصیه کرده در جاهایی که لازم هست حتی المقدور از متغیر های استاتیک استفاده کنید تا اینکه کد رو به صورت پیچیده بنویسید. برای جلو گیری از نشت حافظه هم میتونید متغیرتون رو برابر با null قرار بدید ==> index = null . این کار برای متغیر های مثل boolean,int و دیگر متغیر هاییی که فضای زیادی اشغال نمیکنن زیاد ضروری نیست، ولی برای متغیری مثل یک آرایه کاملا ضروریه و حتما باید بعد از انجام عملیات خودش اون رو خالی کنید. (9 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .