🔴 نشت حافظه (Memory Leak) در اندروید؛ قاتل خاموش برنامهها!
🔍 اگه بعد از چند بار باز و بسته کردن صفحهای، اپلیکیشن کندتر میشه یا کرش میکنه، احتمالاً نشتی داری.
🧠 چرا رخ میده؟
وقتی یه شیء (مثلاً Activity) دیگه نیازی نیست ولی هنوز توسط یه مرجع قوی (مثل Context توی یک سینگلتون) نگه داشته بشه، GC نمیتونه پاکش کنه و حافظه هدر میره.
📌 مثال کلاسیک: نگهداشتن Activity داخل سینگلتون یا ViewModel با لامبدا
🔍 چی میشه؟
وقتی Activity میخواد از بین بره، callback هنوز به viewهاش اشاره داره و Manager هم هنوز زندهست → نشتی
✅ راهحل: استفاده از WeakReference یا پاک کردن callback در onDestroy
💡 نکته حرفهای: در Jetpack از LiveData یا Flow استفاده کن که خودکار lifecycle رو مدیریت میکنن.
🎯 Takeaway: همیشه بعد از اتمام کار Activity یا Fragment، referenceهای خارجی رو null کن. برای دیباگ از ابزار Memory Profiler داخل Android Studio استفاده کن.
#MemoryLeak #AndroidDev #KotlinTips #Performance #CleanCode #AndroidStudio #MemoryManagement
#Codeit #Android #Kotlin #Jetpack
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔍 اگه بعد از چند بار باز و بسته کردن صفحهای، اپلیکیشن کندتر میشه یا کرش میکنه، احتمالاً نشتی داری.
🧠 چرا رخ میده؟
وقتی یه شیء (مثلاً Activity) دیگه نیازی نیست ولی هنوز توسط یه مرجع قوی (مثل Context توی یک سینگلتون) نگه داشته بشه، GC نمیتونه پاکش کنه و حافظه هدر میره.
📌 مثال کلاسیک: نگهداشتن Activity داخل سینگلتون یا ViewModel با لامبدا
class MyManager private constructor() {
companion object {
val instance = MyManager()
}
var callback: (() -> Unit)? = null
}
// داخل Activity
MyManager.instance.callback = {
// اینجا داریم reference activity رو نگه میداریم
findViewById<TextView>(R.id.textView).text = "Done"
}
🔍 چی میشه؟
وقتی Activity میخواد از بین بره، callback هنوز به viewهاش اشاره داره و Manager هم هنوز زندهست → نشتی
✅ راهحل: استفاده از WeakReference یا پاک کردن callback در onDestroy
override fun onDestroy() {
super.onDestroy()
MyManager.instance.callback = null
}
💡 نکته حرفهای: در Jetpack از LiveData یا Flow استفاده کن که خودکار lifecycle رو مدیریت میکنن.
🎯 Takeaway: همیشه بعد از اتمام کار Activity یا Fragment، referenceهای خارجی رو null کن. برای دیباگ از ابزار Memory Profiler داخل Android Studio استفاده کن.
#MemoryLeak #AndroidDev #KotlinTips #Performance #CleanCode #AndroidStudio #MemoryManagement
#Codeit #Android #Kotlin #Jetpack
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
❤2
🐛 اولین قدم برای تبدیل شدن به یک توسعهدهنده حرفهای «Android»، یادگیری اصول دیباگ کردن کدهاست. بدون دیباگ، اشکالیابی مثل گشتن در تاریکی میمونه.
🔍 «Debugging» یعنی اجرای مرحلهبهمرحله برنامه و بررسی متغیرها در لحظه. «Android Studio» با ابزارهای قدرتمندش این کار رو برای مبتدیها هم ساده کرده.
⚙️ فرض کن یه تابع ساده داری که قراره مجموع دو عدد رو برگردونه، ولی اشتباهاً ضرب رو نوشتهای:
🛠 برای پیدا کردن این باگ، کافیه یه «Breakpoint» روی خط
🧠 وقتی ببینی که
✅ هرچقدر بیشتر دیباگ کنی، ذهنت سریعتر ریشه خطاها رو پیدا میکنه. از همون پروژه اول عادت کن با «Debugger» کار کنی.
#Codeit #Android #Kotlin #Jetpack #Debugging #AndroidStudio #Breakpoint #DeveloperTips
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
🔍 «Debugging» یعنی اجرای مرحلهبهمرحله برنامه و بررسی متغیرها در لحظه. «Android Studio» با ابزارهای قدرتمندش این کار رو برای مبتدیها هم ساده کرده.
⚙️ فرض کن یه تابع ساده داری که قراره مجموع دو عدد رو برگردونه، ولی اشتباهاً ضرب رو نوشتهای:
fun calculateSum(a: Int, b: Int): Int {
return a * b // اشتباه: باید a + b باشد
}
🛠 برای پیدا کردن این باگ، کافیه یه «Breakpoint» روی خط
return بذاری و برنامه رو با حالت «Debug» اجرا کنی. بعد با دکمه «Step Over» (F8) خط به خط جلو بری و مقدار متغیرها رو توی پنجره «Variables» ببینی.🧠 وقتی ببینی که
a * b خروجی میده، بلافاصله متوجه اشتباه میشی. تغییرش میدی به a + b و دیگه خیالت راحته.✅ هرچقدر بیشتر دیباگ کنی، ذهنت سریعتر ریشه خطاها رو پیدا میکنه. از همون پروژه اول عادت کن با «Debugger» کار کنی.
#Codeit #Android #Kotlin #Jetpack #Debugging #AndroidStudio #Breakpoint #DeveloperTips
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
❤1👍1🔥1