এই ডকুমেন্ট ধরে নেয় যে আপনি মেমোরি ম্যানেজমেন্টের অধীনে Android অ্যাপের জন্য পেশাদার পদ্ধতি সংক্রান্ত নির্দেশিকা অনুসরণ করেছেন, যেমন আপনার অ্যাপের মেমোরি ম্যানেজ করুন।
ভূমিকা
মেমরি লিক হল এক ধরনের রিসোর্স লিক যা কোনও কম্পিউটার প্রোগ্রাম আর প্রয়োজন নেই এমন বরাদ্দ করা মেমরি রিলিজ না করলে ঘটে। লিকের কারণে অ্যাপ্লিকেশনটি OS-এর কাছে উপলভ্য মেমরির চেয়ে বেশি মেমরির অনুরোধ করতে পারে এবং এর ফলে অ্যাপ্লিকেশনটি ক্র্যাশ করতে পারে। Android অ্যাপে মেমরি লিকের কারণ হতে পারে বেশ কিছু অনুপযুক্ত পদ্ধতি, যেমন রিসোর্স সঠিকভাবে ডিসপোজ না করা অথবা আর প্রয়োজন না থাকলেও লিসেনার আনরেজিস্টার না করা।
এই ডকুমেন্ট আপনাকে কিছু পেশাদার পদ্ধতি প্রদান করে যা আপনার কোডে মেমরি লিক প্রতিরোধ, শনাক্ত এবং সমাধান করতে সাহায্য করে। আপনি যদি এই ডকুমেন্টে উল্লেখ করা পদ্ধতিগুলি চেষ্টা করে থাকেন এবং আমাদের SDK-তে মেমরি লিক হওয়ার সন্দেহ করেন, তাহলে Google SDK-তে কীভাবে সমস্যার রিপোর্ট করবেন দেখুন।
সহায়তা টিমের সাথে যোগাযোগ করার আগে
Google সহায়তা টিমের কাছে মেমরি লিক সম্পর্কে অভিযোগ করার আগে, আপনার কোডে কোনও সমস্যা নেই তা নিশ্চিত করতে এই ডকুমেন্টে দেওয়া ডিবাগিং ধাপের পাশাপাশি পেশাদার পদ্ধতি অনুসরণ করুন। এইসব ধাপ আপনার সমস্যার সমাধান করতে পারে এবং যদি তা না হয়, তাহলে Google সহায়তা টিমের আপনাকে সাহায্য করার জন্য প্রয়োজনীয় তথ্য তৈরি করে।
মেমরি লিক আটকানো
Google SDK ব্যবহার করে এমন কোডে মেমরি লিকের সবচেয়ে সাধারণ কিছু কারণ এড়াতে সাহায্য করার জন্য এই পেশাদার পদ্ধতিগুলি অনুসরণ করুন।
Android অ্যাপের জন্য পেশাদার পদ্ধতি
আপনার Android অ্যাপ্লিকেশনে নিম্নলিখিত সবকটি কাজ করেছেন কিনা তা চেক করুন:
- অব্যবহৃত রিসোর্স রিলিজ করুন।
- আর প্রয়োজন না থাকলে লিসেনার আনরেজিস্টার করুন।
- প্রয়োজন না থাকলে টাস্ক বাতিল করুন।
- রিসোর্স রিলিজ করার জন্য লাইফসাইকেল পদ্ধতি ফরওয়ার্ড করুন।
- SDK-এর লেটেস্ট ভার্সন ব্যবহার করুন।
- ANR এড়াতে ইনিশিয়ালাইজেশনের সময় মূল থ্রেড ব্লক করা এড়িয়ে চলুন।
এইসব পদ্ধতির প্রতিটির জন্য নির্দিষ্ট বিবরণ জানতে, নিম্নলিখিত বিভাগগুলি দেখুন।
অব্যবহৃত রিসোর্স রিলিজ করা
আপনার Android অ্যাপ কোনও রিসোর্স ব্যবহার করলে, সেটি আর প্রয়োজন না হলে রিলিজ করতে ভুলবেন না। আপনি তা না করলে, আপনার অ্যাপ্লিকেশন রিসোর্স ব্যবহার করা বন্ধ করে দেওয়ার পরেও সেটি মেমরি ব্যবহার করতে থাকবে। আরও তথ্যের জন্য, Android ডকুমেন্টেশনে অ্যাক্টিভিটি লাইফসাইকেল পর্যালোচনা করুন।
GeoSDK-তে পুরনো GoogleMap রেফারেন্স রিলিজ করুন
একটি সাধারণ ভুল হল, NavigationView বা MapView ব্যবহার করে ক্যাশে করা হলে, GoogleMap-এর কারণে মেমরি লিক হতে পারে। GoogleMap-এর সাথে NavigationView বা MapView-এর ১:১ সম্পর্ক আছে, যেখান থেকে এটি ফিরিয়ে আনা হয়। আপনাকে নিশ্চিত করতে হবে যে GoogleMap ক্যাশে করা হয়নি অথবা NavigationView#onDestroy বা MapView#onDestroy কল করা হলে রেফারেন্স রিলিজ করা হয়েছে। NavigationSupportFragment, MapSupportFragment বা আপনার নিজস্ব ফ্র্যাগমেন্ট ব্যবহার করে এই ভিউগুলি র্যাপ করলে, রেফারেন্সটি Fragment#onDestroyView-এ রিলিজ করতে হবে।
class NavFragment : SupportNavigationFragment() {
var googleMap: GoogleMap?
override fun onCreateView(
inflater: LayoutInflater,
parent: ViewGroup?,
savedInstanceState: Bundle?,
): View {
super.onCreateView(inflater,parent,savedInstanceState)
getMapAsync{map -> googleMap = map}
}
override fun onDestroyView() {
googleMap = null
}
}
আর প্রয়োজন না থাকলে লিসেনার আনরেজিস্টার করুন
আপনার Android অ্যাপ কোনও ইভেন্টের জন্য লিসেনার রেজিস্টার করলে, যেমন বোতামে ক্লিক করা বা ভিউয়ের স্ট্যাটাসে পরিবর্তন, অ্যাপ্লিকেশনটি ইভেন্ট মনিটর করা বন্ধ করে দিলে লিসেনার আনরেজিস্টার করতে ভুলবেন না। আপনি যদি তা না করেন, তাহলে আপনার অ্যাপ্লিকেশন তাদের সাথে কাজ শেষ করার পরেও লিসেনাররা মেমরি ব্যবহার করা চালিয়ে যায়।
যেমন, ধরুন আপনার অ্যাপ্লিকেশন Navigation SDK ব্যবহার করে এবং এটি
গন্তব্যে পৌঁছানোর ইভেন্ট শোনার জন্য নিম্নলিখিত লিসেনারকে কল করে:
গন্তব্যে পৌঁছানোর ইভেন্ট শোনার জন্য addArrivalListener
পদ্ধতি, এটিকেও কল করা উচিত
removeArrivalListener
যখন এটি আর গন্তব্যে পৌঁছানোর ইভেন্ট মনিটর করার প্রয়োজন হয় না।
var arrivalListener: Navigator.ArrivalListener? = null
fun registerNavigationListeners() {
arrivalListener =
Navigator.ArrivalListener {
...
}
navigator.addArrivalListener(arrivalListener)
}
override fun onDestroy() {
navView.onDestroy()
if (arrivalListener != null) {
navigator.removeArrivalListener(arrivalListener)
}
...
super.onDestroy()
}
প্রয়োজন না থাকলে টাস্ক বাতিল করুন
কোনও Android অ্যাপ ডাউনলোড বা নেটওয়ার্ক অনুরোধের মতো অ্যাসিঙ্ক্রোনাস টাস্ক শুরু করলে, টাস্কটি শেষ হওয়ার পরে সেটি বাতিল করতে ভুলবেন না। টাস্ক বাতিল না করা হলে, অ্যাপের কাজ শেষ হয়ে যাওয়ার পরেও এটি ব্যাকগ্রাউন্ডে চলতে থাকে।
পেশাদার পদ্ধতি সম্পর্কে আরও জানতে, Android ডকুমেন্টেশনে আপনার অ্যাপের মেমরি ম্যানেজ করুন দেখুন।
রিসোর্স রিলিজ করার জন্য লাইফসাইকেল পদ্ধতি ফরওয়ার্ড করুন
আপনার অ্যাপ Navigation বা Maps SDK ব্যবহার করলে, লাইফসাইকেল পদ্ধতি (বোল্ডে দেখানো হয়েছে) navView-এ ফরওয়ার্ড করে রিসোর্স রিলিজ করতে ভুলবেন না। আপনি
Navigation SDK-তে NavigationView বা Maps অথবা
Navigation SDK-তে MapView ব্যবহার করে এটি করতে পারবেন। এছাড়াও, আপনি সরাসরি NavigationView এবং MapView ব্যবহার করার পরিবর্তে
যথাক্রমে SupportNavigationFragment বা
SupportMapFragment ব্যবহার করতে পারেন। সহায়ক ফ্র্যাগমেন্ট লাইফসাইকেল মেথড ফরওয়ার্ড করার বিষয়টি
ম্যানেজ করে।
class NavViewActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...
navView = ...
navView.onCreate(savedInstanceState)
...
}
override fun onSaveInstanceState(savedInstanceState: Bundle) {
super.onSaveInstanceState(savedInstanceState)
navView.onSaveInstanceState(savedInstanceState)
}
override fun onTrimMemory(level: Int) {
super.onTrimMemory(level)
navView.onTrimMemory(level)
}
/* Same with
override fun onStart()
override fun onResume()
override fun onPause()
override fun onConfigurationChanged(...)
override fun onStop()
override fun onDestroy()
*/
}
SDK-এর লেটেস্ট ভার্সন ব্যবহার করুন
Google SDK-তে নতুন ফিচার, সমস্যার সমাধান ও পারফর্ম্যান্সের উন্নতির জন্য ক্রমাগত আপডেট করা হচ্ছে। এইসব সমস্যার সমাধান পেতে আপনার অ্যাপে SDK আপ-টু-ডেট রাখুন।
ANR এড়াতে ইনিশিয়ালাইজেশনের সময় মূল থ্রেড ব্লক করা এড়িয়ে চলুন
কোনও অ্যাপ যদি অনেকক্ষণ ধরে মূল থ্রেড ব্লক করে রাখে, তাহলে
"অ্যাপ্লিকেশন সাড়া দিচ্ছে না" (ANR) সংক্রান্ত সমস্যা হতে পারে। ANR এড়াতে, দীর্ঘ সময় ধরে চলা টাস্ক স্থগিত রেখে বা মূল থ্রেড থেকে সেগুলি সরিয়ে দিয়ে
onCreate()-এর মতো লাইফসাইকেল
পদ্ধতি যতটা সম্ভব হালকা রাখুন।
SDK ইনিশিয়ালাইজেশন সম্পর্কিত ANR এড়াতে:
- একবারে শুধুমাত্র একটি ম্যাপ ইনস্ট্যান্স তৈরি করুন।
- ম্যাপ ইনস্ট্যান্টিয়েট করার সময় UI থ্রেডে যতটা সম্ভব কম কাজ করুন।
মেমরি লিক ডিবাগ করুন
এই ডকুমেন্টে আগে উল্লেখ করা সব প্রযোজ্য সাজেশন প্রয়োগ করার পরেও যদি মেমরি লিক দেখতে পান, তাহলে ডিবাগ করার জন্য এই প্রসেস অনুসরণ করুন।
শুরু করার আগে, Android কীভাবে মেমরি ম্যানেজ করে সেই সম্পর্কে আপনার জানা উচিত। আরও তথ্যের জন্য, Android-এর মেমোরি ম্যানেজমেন্টের ওভারভিউ পড়ুন।
মেমরি লিক ডিবাগ করতে, এই প্রসেস অনুসরণ করুন:
- সমস্যাটি আবার তৈরি করুন। এটি ডিবাগ করার জন্য এই ধাপটি অত্যন্ত গুরুত্বপূর্ণ।
- মেমরির ব্যবহার প্রত্যাশিত কিনা তা চেক করুন। ব্যবহারের পরিমাণ বৃদ্ধি পাওয়ার ফলে যে লিক হয়েছে বলে মনে হচ্ছে, সেটি আসলে আপনার অ্যাপ্লিকেশন চালানোর জন্য প্রয়োজনীয় মেমরি কিনা তা চেক করে দেখুন।
- হাই-লেভেলে ডিবাগ করা। ডিবাগ করার জন্য আপনি একাধিক ইউটিলিটি ব্যবহার করতে পারবেন। তিনটি আলাদা স্ট্যান্ডার্ড টুল সেট Android-এ মেমরি সংক্রান্ত সমস্যা ডিবাগ করতে সাহায্য করে: Android Studio, Perfetto এবং Android ডিবাগ ব্রিজ (adb) কমান্ড লাইন ইউটিলিটি।
- আপনার অ্যাপের মেমরি ব্যবহার চেক করুন। হিপ ডাম্প ও অ্যালোকেশন ট্র্যাকিং পান এবং তারপর এটি বিশ্লেষণ করুন।
- মেমরি লিক সংক্রান্ত সমস্যার সমাধান করুন।
নিম্নলিখিত বিভাগে এইসব ধাপের ব্যাপারে বিস্তারিত তথ্য দেওয়া আছে।
ধাপ ১: সমস্যাটি আবার তৈরি করুন
আপনি যদি সমস্যাটি আবার তৈরি করতে না পারেন, তাহলে প্রথমে সেইসব পরিস্থিতি বিবেচনা করুন যেগুলি মেমরি লিকের কারণ হতে পারে। আপনি যদি জানেন যে সমস্যাটি আবার তৈরি করা হয়েছে, তাহলে সরাসরি হিপ ডাম্প দেখার চেষ্টা করতে পারেন। তবে, আপনি যদি অ্যাপ স্টার্টআপ বা অন্য কোনও র্যান্ডম সময়ে হিপ ডাম্প পান, তাহলে আপনি হয়ত লিক ট্রিগার করার শর্ত অ্যাক্টিভেট করেননি। সমস্যাটি আবার তৈরি করার চেষ্টা করার সময় বিভিন্ন পরিস্থিতি বিবেচনা করুন:
কোন কোন ফিচার অ্যাক্টিভেট করা আছে?
ব্যবহারকারীর অ্যাকশনের কোন নির্দিষ্ট ক্রম লিক ট্রিগার করে?
- আপনি কি এই সিকোয়েন্স অ্যাক্টিভেট করার জন্য একাধিকবার চেষ্টা করেছেন?
অ্যাপটি কোন কোন লাইফসাইকেল স্টেটের মধ্যে দিয়ে গেছে?
- আপনি কি বিভিন্ন লাইফসাইকেল স্ট্যাটাসের মাধ্যমে একাধিক ইটারেশন চেষ্টা করেছেন?
SDK-এর লেটেস্ট ভার্সনে আপনি সমস্যাটি আবার তৈরি করতে পারছেন কিনা তা নিশ্চিত করুন। পূর্ববর্তী ভার্সনের সমস্যাটি হয়ত আগেই সমাধান করা হয়েছে।
ধাপ ২: অ্যাপের মেমরির ব্যবহার প্রত্যাশিত কিনা তা চেক করুন
প্রতিটি ফিচারের জন্য অতিরিক্ত মেমরি প্রয়োজন। আপনি বিভিন্ন পরিস্থিতি ডিবাগ করার সময়, এটি প্রত্যাশিত ব্যবহার নাকি মেমরি লিক তা বিবেচনা করুন। যেমন, বিভিন্ন ফিচার বা ব্যবহারকারীর টাস্কের জন্য, নিম্নলিখিত সম্ভাবনাগুলি বিবেচনা করুন:
সম্ভবত লিক: একাধিক ইটারেশনের মাধ্যমে পরিস্থিতি অ্যাক্টিভেট করার ফলে সময়ের সাথে সাথে মেমরির ব্যবহার বৃদ্ধি পায়।
সম্ভবত প্রত্যাশিত মেমরির ব্যবহার: দৃশ্যটি বন্ধ হওয়ার পরে মেমরি আবার ফিরে পাওয়া যায়।
সম্ভবত প্রত্যাশিত মেমরির ব্যবহার: মেমরির ব্যবহার কিছু সময়ের জন্য বৃদ্ধি পায় এবং তারপর কমে যায়। এটি বাউন্ডেড ক্যাশে বা অন্যান্য প্রত্যাশিত মেমরির ব্যবহারের কারণে হতে পারে।
অ্যাপের আচরণ যদি প্রত্যাশিত মেমরির ব্যবহারের মতো হয়, তাহলে আপনার অ্যাপের মেমরি ম্যানেজ করে সমস্যার সমাধান করা যেতে পারে। সহায়তার জন্য, আপনার অ্যাপের মেমরি ম্যানেজ করুন দেখুন।
ধাপ ৩: হাই লেভেলে ডিবাগ করা
মেমরি লিক ডিবাগ করার সময়, উচ্চ লেভেল থেকে শুরু করুন এবং তারপর সম্ভাবনাগুলি সংকীর্ণ করার পরে ড্রিল ডাউন করুন। সময়ের সাথে সাথে মেমরি লিক হচ্ছে কিনা তা প্রথমে বিশ্লেষণ করতে এইসব হাই-লেভেল ডিবাগিং টুলের মধ্যে কোনও একটি ব্যবহার করুন:
Android Studio মেমরি প্রোফাইলার (সাজেস্ট করা হয়েছে)
Android Studio মেমরি প্রোফাইলার
এই টুল আপনাকে ব্যবহৃত মেমরির ভিজ্যুয়াল হিস্টোগ্রাম দেখায়। হিপ ডাম্প এবং অ্যালোকেশন ট্র্যাকিংও এই একই ইন্টারফেস থেকে ট্রিগার করা যেতে পারে। এই টুলটি ডিফল্ট সাজেশন। আরও তথ্যের জন্য, Android Studio মেমরি প্রোফাইলার দেখুন।
Perfetto মেমরি কাউন্টার
Perfetto আপনাকে একাধিক মেট্রিক ট্র্যাক করার উপর নিখুঁত কন্ট্রোল দেয় এবং এটি একটি হিস্টোগ্রামে সব দেখায়। আরও তথ্যের জন্য, Perfetto মেমরি কাউন্টার দেখুন।

Android ডিবাগ ব্রিজ (adb) কমান্ড লাইন ইউটিলিটি
Perfetto-এর মাধ্যমে আপনি যা ট্র্যাক করতে পারেন তার বেশিরভাগই adb
কমান্ড লাইন ইউটিলিটি হিসেবেও উপলভ্য যা আপনি সরাসরি কোয়েরি করতে পারেন। কয়েকটি গুরুত্বপূর্ণ
উদাহরণ হল:
Meminfo আপনাকে কোনও নির্দিষ্ট সময়ে মেমরি সম্পর্কিত বিস্তারিত তথ্য দেখতে দেয়।
Procstats কিছু গুরুত্বপূর্ণ অ্যাগ্রিগেটেড পরিসংখ্যান প্রদান করে।
এখানে দেখার মতো একটি গুরুত্বপূর্ণ পরিসংখ্যান হল সর্বাধিক ফিজিক্যাল মেমরি ফুটপ্রিন্ট
(maxRSS) যা অ্যাপের সময়ের সাথে সাথে প্রয়োজন হয়। MaxPSS সঠিক নাও হতে পারে। সঠিকতা
বাড়ানোর উপায় জানতে, adb shell dumpsys procstats --help –start-testing ফ্ল্যাগ দেখুন।
অ্যালোকেশন ট্র্যাকিং
অ্যালোকেশন ট্র্যাকিং সেই স্ট্যাক ট্রেস শনাক্ত করে যেখানে মেমরি বরাদ্দ করা হয়েছিল এবং যদি এটি খালি না করা হয়। নেটিভ কোডে লিক ট্র্যাক করার সময় এই ধাপটি বিশেষভাবে সহায়ক হয়। যেহেতু এই টুল স্ট্যাক ট্রেস শনাক্ত করে, তাই এটি মূল কারণ দ্রুত ডিবাগ করার বা কীভাবে সমস্যাটি আবার তৈরি করা যায় তা খুঁজে বের করার একটি দুর্দান্ত উপায় হতে পারে। অ্যালোকেশন ট্র্যাকিং ব্যবহার করার ধাপগুলি জানতে, অ্যালোকেশন ট্র্যাকিং সহ নেটিভ কোডে মেমরি ডিবাগ করুন দেখুন।
ধাপ ৪: হিপ ডাম্পের মাধ্যমে আপনার অ্যাপের মেমরি ব্যবহার চেক করুন
মেমরি লিক শনাক্ত করার একটি উপায় হল আপনার অ্যাপের হিপ ডাম্প পাওয়া এবং তারপর লিকের জন্য এটি পরীক্ষা করা। হিপ ডাম্প হল কোনও অ্যাপের মেমরিতে থাকা সব অবজেক্টের একটি স্ন্যাপশট। এটি মেমরি লিক এবং মেমরি সংক্রান্ত অন্যান্য সমস্যা ডায়াগনসিস করতে ব্যবহার করা যেতে পারে।
Android Studio এমন মেমরি লিক শনাক্ত করতে পারে যা GC-এর মাধ্যমে সমাধান করা যায় না। আপনি হিপ ডাম্প ক্যাপচার করলে, Android Studio চেক করে দেখে যে এমন কোনও অ্যাক্টিভিটি বা ফ্র্যাগমেন্ট আছে কিনা যা এখনও অ্যাক্সেস করা যাচ্ছে কিন্তু আগেই নষ্ট হয়ে গেছে।
- হিপ ডাম্প ক্যাপচার করুন।
- মেমরি লিক খুঁজে পেতে হিপ ডাম্প বিশ্লেষণ করুন।
- মেমরি লিক সংক্রান্ত সমস্যার সমাধান করা।
বিস্তারিত জানতে, নিম্নলিখিত বিভাগগুলি দেখুন।
হিপ ডাম্প ক্যাপচার করুন
হিপ ডাম্প ক্যাপচার করতে, আপনি Android ডিবাগ ব্রিজ (adb) বা Android Studio মেমরি প্রোফাইলার ব্যবহার করতে পারেন।
হিপ ডাম্প ক্যাপচার করতে adb ব্যবহার করুন
adb ব্যবহার করে হিপ ডাম্প ক্যাপচার করতে, এইসব ধাপ অনুসরণ করুন:
- আপনার কম্পিউটারের সাথে Android ডিভাইস কানেক্ট করুন।
- কমান্ড প্রম্পট খুলে adb টুল আছে এমন ডিরেক্টরিতে নেভিগেট করুন।
হিপ ডাম্প ক্যাপচার করতে, এই কমান্ড রান করুন :
adb shell am dumpheap my.app.name $PHONE_FILE_OUTহিপ ডাম্প ফিরিয়ে আনতে, এই কমান্ড রান করুন:
adb pull $PHONE_FILE_OUT $LOCAL_FILE.
হিপ ডাম্প ক্যাপচার করতে Android Studio ব্যবহার করা
Android Studio মেমরি প্রোফাইলার ব্যবহার করে হিপ ডাম্প ক্যাপচার করতে, Android-এর হিপ ডাম্প ক্যাপচার করুন বিভাগে এইসব ধাপ অনুসরণ করুন।
মেমরি লিক খুঁজে পেতে হিপ ডাম্প বিশ্লেষণ করুন
আপনি হিপ ডাম্প ক্যাপচার করার পরে, এটি বিশ্লেষণ করতে Android Studio মেমরি প্রোফাইলার ব্যবহার করতে পারেন। এটি করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
Android Studio-তে আপনার Android প্রোজেক্ট খুলুন।
রান করুন বিকল্প বেছে নিন এবং তারপরে ডিবাগ কনফিগারেশন বেছে নিন।
Android Profiler ট্যাব খুলুন।
মেমরি বিকল্প বেছে নিন।
হিপ ডাম্প খুলুন বিকল্প বেছে নিন এবং আপনার তৈরি করা হিপ ডাম্প ফাইলটি বেছে নিন। মেমরি প্রোফাইলার আপনার অ্যাপের মেমরি ব্যবহারের গ্রাফ দেখায়।
হিপ ডাম্প বিশ্লেষণ করতে গ্রাফ ব্যবহার করুন:
যেসব অবজেক্ট আর ব্যবহার করা হচ্ছে না সেগুলি শনাক্ত করুন।
অনেক মেমরি ব্যবহার করে এমন অবজেক্ট শনাক্ত করুন।
প্রতিটি অবজেক্ট কতটা মেমরি ব্যবহার করছে তা দেখুন।
মেমরি লিকের সোর্স খুঁজে বের করতে বা আরও নির্দিষ্ট করতে এবং তা ঠিক করতে এই তথ্য ব্যবহার করুন।
ধাপ ৫: মেমরি লিক সংক্রান্ত সমস্যার সমাধান করা
মেমরি লিকের সোর্স শনাক্ত করার পরে, আপনি এটি ঠিক করতে পারবেন। আপনার Android অ্যাপে মেমরি লিক সংক্রান্ত সমস্যার সমাধান করলে, আপনার অ্যাপের পারফর্ম্যান্স ও স্টেবিলিটি উন্নত করতে সাহায্য করে। পরিস্থিতির উপর নির্ভর করে, বিবরণ আলাদা হয়। তবে, নিম্নলিখিত সাজেশনগুলি সাহায্য করতে পারে:
Android-এর আপনার অ্যাপের মেমরি ম্যানেজ করুন শীর্ষক নিবন্ধে যেভাবে সাজেস্ট করা হয়েছে, আপনার অ্যাপ সেই অনুযায়ী মেমরি বরাদ্দ ও মুক্ত করছে কিনা তা নিশ্চিত করুন।
আপনার অ্যাপ থেকে অব্যবহৃত কোড বা রিসোর্স সরিয়ে দিন। Android অ্যাপের জন্য বিস্তারিত জানতে, Android অ্যাপের জন্য পেশাদার পদ্ধতি দেখুন।
অন্যান্য ডিবাগিং টুল
এইসব ধাপ সম্পূর্ণ করার পরেও, আপনি যদি মেমরি লিক খুঁজে না পান এবং সমস্যার সমাধান না করতে পারেন, তাহলে এইসব টুল ব্যবহার করে দেখুন:
অ্যালোকেশন ট্র্যাকিংয়ের মাধ্যমে নেটিভ কোডে মেমরি ডিবাগ করা
আপনি সরাসরি নেটিভ কোড ব্যবহার না করলেও, Google SDK সহ বেশ কিছু সাধারণ Android লাইব্রেরি তা করে। আপনার যদি মনে হয় যে নেটিভ কোডে মেমরি লিক হচ্ছে, তাহলে বিভিন্ন টুল ব্যবহার করে আপনি এটি ডিবাগ করতে পারবেন। Android Studio অথবা heapprofd (Perfetto-র সাথেও মানানসই) ব্যবহার করে অ্যালোকেশন ট্র্যাক করা হল মেমরি লিকের সম্ভাব্য কারণ শনাক্ত করার একটি দুর্দান্ত উপায় এবং এটি প্রায়শই ডিবাগ করার দ্রুততম উপায়।
অ্যালোকেশন ট্র্যাকিংয়ের আরেকটি সুবিধা হল, হিপে পাওয়া যেতে পারে এমন সংবেদনশীল তথ্য ছাড়াই আপনি ফলাফল শেয়ার করতে পারবেন।
LeakCanary-এর সাহায্যে লিক শনাক্ত করা
LeakCanary হল Android অ্যাপে মেমরি লিক শনাক্ত করার একটি শক্তিশালী টুল। আপনার অ্যাপে LeakCanary কীভাবে ব্যবহার করবেন সেই সম্পর্কে আরও জানতে, LeakCanary দেখুন।
Google SDK-এর সাথে সম্পর্কিত সমস্যা কীভাবে রিপোর্ট করবেন
আপনি যদি এই ডকুমেন্টে উল্লেখ করা পদ্ধতিগুলি ব্যবহার করে থাকেন এবং আমাদের SDK-তে মেমরি লিক হয়েছে বলে সন্দেহ করেন, তাহলে নিম্নলিখিত তথ্যগুলি যতটা সম্ভব বিশদে উল্লেখ করে গ্রাহক সহায়তার সাথে যোগাযোগ করুন:
মেমরি লিক আবার তৈরি করার ধাপ। ধাপগুলিতে জটিল কোডিংয়ের প্রয়োজন হলে, আমাদের স্যাম্পেল অ্যাপে সমস্যাটি রেপ্লিকেট করে এমন কোড কপি করা এবং লিক ট্রিগার করার জন্য UI-তে নিতে হবে এমন অতিরিক্ত ধাপ প্রদান করা সহায়ক হতে পারে।
সমস্যাটি আবার তৈরি করে আপনার অ্যাপ থেকে হিপ ডাম্প ক্যাপচার করা হয়েছে। দুটি আলাদা সময়ে হিপ ডাম্প ক্যাপচার করুন যা দেখায় যে মেমরির ব্যবহার উল্লেখযোগ্য পরিমাণে বৃদ্ধি পেয়েছে।
নেটিভ মেমরি লিক হওয়ার সম্ভাবনা থাকলে, heapprofd থেকে অ্যালোকেশন ট্র্যাকিং আউটপুট শেয়ার করুন।
আপনি লিক হওয়ার পরিস্থিতি আবার তৈরি করার পরে নেওয়া একটি ত্রুটির রিপোর্ট।
মেমরি-সম্পর্কিত যেকোনও ক্র্যাশের স্ট্যাক ট্রেস।
গুরুত্বপূর্ণ নোট: মেমরি সংক্রান্ত সমস্যার ডিবাগ করার জন্য স্ট্যাক ট্রেস সাধারণত যথেষ্ট নয়, তাই আপনি অন্য কোনও ফর্মের তথ্যও প্রদান করেছেন কিনা তা নিশ্চিত করুন।