এই ডকুমেন্টটি ধরে নিচ্ছে যে আপনি মেমরি ব্যবস্থাপনার অধীনে অ্যান্ড্রয়েড অ্যাপগুলির জন্য সেরা-অনুশীলন নির্দেশিকা অনুসরণ করেছেন, যেমন আপনার অ্যাপের মেমরি পরিচালনা করুন ।
ভূমিকা
মেমোরি লিক হলো এক ধরণের রিসোর্স লিক যা তখন ঘটে যখন কোনও কম্পিউটার প্রোগ্রাম বরাদ্দকৃত মেমোরি প্রকাশ করে না যা আর প্রয়োজন হয় না। লিক হওয়ার ফলে অ্যাপ্লিকেশনটি অপারেটিং সিস্টেম থেকে তার উপলব্ধ মেমোরির চেয়ে বেশি মেমোরির অনুরোধ করতে পারে এবং এর ফলে অ্যাপ্লিকেশনটি ক্র্যাশ হয়ে যেতে পারে। বেশ কয়েকটি অনুপযুক্ত অভ্যাস অ্যান্ড্রয়েড অ্যাপগুলিতে মেমোরি লিক হতে পারে, যেমন রিসোর্স সঠিকভাবে নিষ্পত্তি না করা বা যখন আর প্রয়োজন নেই তখন শ্রোতাদের নিবন্ধনমুক্ত না করা।
এই ডকুমেন্টটি আপনার কোডে মেমরি লিক প্রতিরোধ, সনাক্তকরণ এবং সমাধানের জন্য কিছু সেরা অনুশীলন প্রদান করে। আপনি যদি এই ডকুমেন্টের পদ্ধতিগুলি চেষ্টা করে দেখে থাকেন এবং আমাদের SDK গুলিতে মেমরি লিক সন্দেহ করেন, তাহলে Google SDK গুলির সাথে সমস্যাগুলি কীভাবে রিপোর্ট করবেন তা দেখুন।
সহায়তার সাথে যোগাযোগ করার আগে
গুগল সাপোর্ট টিমকে মেমোরি লিক রিপোর্ট করার আগে, এই ডকুমেন্টে দেওয়া ডিবাগিং ধাপগুলির সাথে সেরা অনুশীলনগুলি অনুসরণ করুন যাতে আপনার কোডে ত্রুটিটি না থাকে। এই ধাপগুলি আপনার সমস্যার সমাধান করতে পারে, এবং যদি তা না হয়, তাহলে এগুলি গুগল সাপোর্ট টিমের আপনাকে সাহায্য করার জন্য প্রয়োজনীয় তথ্য তৈরি করে।
মেমরি লিক প্রতিরোধ করুন
গুগল এসডিকে ব্যবহার করা কোডে মেমরি লিক হওয়ার কিছু সাধারণ কারণ এড়াতে এই সেরা অনুশীলনগুলি অনুসরণ করুন।
অ্যান্ড্রয়েড অ্যাপের জন্য সেরা অনুশীলন
আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনে আপনি নিম্নলিখিত সমস্ত কাজ করেছেন কিনা তা পরীক্ষা করুন:
- অব্যবহৃত সম্পদ ছেড়ে দিন ।
 - আর প্রয়োজন না হলে শ্রোতাদের নিবন্ধনমুক্ত করুন ।
 - প্রয়োজন না হলে কাজগুলি বাতিল করুন ।
 - সম্পদ প্রকাশের জন্য জীবনচক্র পদ্ধতিগুলি এগিয়ে নিয়ে যান ।
 - SDK-এর সর্বশেষ সংস্করণগুলি ব্যবহার করুন
 
এই প্রতিটি অনুশীলনের সুনির্দিষ্ট বিবরণের জন্য, নিম্নলিখিত বিভাগগুলি দেখুন।
অব্যবহৃত সম্পদ ছেড়ে দিন
যখন আপনার অ্যান্ড্রয়েড অ্যাপ কোনও রিসোর্স ব্যবহার করে, তখন রিসোর্সটি আর প্রয়োজন না হলে রিলিজ করতে ভুলবেন না। যদি না করেন, তাহলে আপনার অ্যাপ্লিকেশনটি শেষ হওয়ার পরেও রিসোর্সটি মেমোরি দখল করতে থাকবে। আরও তথ্যের জন্য, অ্যান্ড্রয়েড ডকুমেন্টেশনে The activity lifecycle পর্যালোচনা করুন।
GeoSDK-তে পুরনো GoogleMap রেফারেন্স প্রকাশ করুন
একটি সাধারণ ভুল হল, NavigationView অথবা MapView ব্যবহার করে ক্যাশে করলে GoogleMap মেমোরি লিক হতে পারে। NavigationView অথবা MapView যেখান থেকে এটি পুনরুদ্ধার করা হয় তার সাথে GoogleMap-এর ১ থেকে ১ সম্পর্ক থাকে। আপনাকে নিশ্চিত করতে হবে যে 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
  }
}
আর প্রয়োজন না হলে শ্রোতাদের নিবন্ধনমুক্ত করুন
যখন আপনার অ্যান্ড্রয়েড অ্যাপ কোনও ইভেন্টের জন্য শ্রোতা নিবন্ধন করে, যেমন বোতামে ক্লিক করা বা দেখার অবস্থা পরিবর্তন করা, তখন অ্যাপ্লিকেশনটির আর ইভেন্ট পর্যবেক্ষণ করার প্রয়োজন না হলে শ্রোতাটিকে নিবন্ধনমুক্ত করতে ভুলবেন না। যদি আপনি তা না করেন, তাহলে আপনার অ্যাপ্লিকেশনটি শেষ হওয়ার পরেও শ্রোতারা মেমোরি দখল করতে থাকবে।
 উদাহরণস্বরূপ, ধরুন আপনার অ্যাপ্লিকেশনটি নেভিগেশন 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()
}
প্রয়োজন না হলে কাজগুলি বাতিল করুন
যখন কোনও অ্যান্ড্রয়েড অ্যাপ কোনও অ্যাসিঙ্ক্রোনাস কাজ শুরু করে, যেমন ডাউনলোড বা নেটওয়ার্ক অনুরোধ, তখন নিশ্চিত করুন যে আপনি কাজটি শেষ হওয়ার পরে বাতিল করেছেন। যদি কাজটি বাতিল না করা হয়, তবে অ্যাপটি শেষ হওয়ার পরেও এটি ব্যাকগ্রাউন্ডে চলতে থাকে।
সেরা অনুশীলন সম্পর্কে আরও তথ্যের জন্য, অ্যান্ড্রয়েড ডকুমেন্টেশনে আপনার অ্যাপের মেমরি পরিচালনা করুন দেখুন।
সম্পদ প্রকাশের জন্য জীবনচক্র পদ্ধতিগুলি এগিয়ে নিন
 যদি আপনার অ্যাপটি নেভিগেশন বা ম্যাপস SDK ব্যবহার করে, তাহলে লাইফসাইকেল পদ্ধতিগুলি (মোটা অক্ষরে দেখানো হয়েছে) navView এ ফরোয়ার্ড করে রিসোর্সগুলি প্রকাশ করতে ভুলবেন না। আপনি নেভিগেশন SDK এ NavigationView অথবা Maps অথবা নেভিগেশন 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 গুলি আপ-টু-ডেট রাখুন।
মেমরি লিক ডিবাগ করুন
এই ডকুমেন্টে পূর্বে উল্লেখিত সমস্ত প্রযোজ্য পরামর্শ বাস্তবায়নের পরেও যদি আপনি মেমরি লিক দেখতে পান, তাহলে ডিবাগ করার জন্য এই প্রক্রিয়াটি অনুসরণ করুন।
শুরু করার আগে , আপনার অ্যান্ড্রয়েড কীভাবে মেমরি পরিচালনা করে তা জানা উচিত। আরও তথ্যের জন্য, মেমরি পরিচালনার অ্যান্ড্রয়েড ওভারভিউ পড়ুন।
মেমরি লিক ডিবাগ করতে, এই প্রক্রিয়াটি অনুসরণ করুন:
- সমস্যাটি পুনরায় তৈরি করুন । এটি ডিবাগ করার জন্য এই পদক্ষেপটি অপরিহার্য।
 - মেমোরির ব্যবহার প্রত্যাশিত কিনা তা পরীক্ষা করুন । পরীক্ষা করুন যে বর্ধিত ব্যবহার যা লিক বলে মনে হচ্ছে তা আসলে আপনার অ্যাপ্লিকেশন চালানোর জন্য প্রয়োজনীয় মেমোরি নয়।
 - উচ্চ-স্তরে ডিবাগ করুন । ডিবাগ করার জন্য আপনি বেশ কয়েকটি ইউটিলিটি ব্যবহার করতে পারেন। তিনটি ভিন্ন স্ট্যান্ডার্ড টুল সেট অ্যান্ড্রয়েডে মেমরির সমস্যাগুলি ডিবাগ করতে সাহায্য করে: অ্যান্ড্রয়েড স্টুডিও, পারফেটো এবং অ্যান্ড্রয়েড ডিবাগ ব্রিজ (adb) কমান্ড লাইন ইউটিলিটি।
 - আপনার অ্যাপের মেমোরি ব্যবহার পরীক্ষা করুন । একটি হিপ ডাম্প এবং অ্যালোকেশন ট্র্যাকিং পান এবং তারপর এটি বিশ্লেষণ করুন।
 - মেমোরি লিক ঠিক করুন ।
 
নিম্নলিখিত বিভাগগুলিতে এই পদক্ষেপগুলি বিস্তারিতভাবে আলোচনা করা হয়েছে।
ধাপ ১: সমস্যাটি পুনরায় তৈরি করুন
যদি আপনি সমস্যাটি পুনরায় তৈরি করতে না পারেন, তাহলে প্রথমে মেমোরি লিক হওয়ার কারণ কী হতে পারে তা বিবেচনা করুন। যদি আপনি জানেন যে সমস্যাটি পুনরায় তৈরি করা হয়েছে, তাহলে সরাসরি হিপ ডাম্পটি দেখে নেওয়া কাজ করতে পারে। তবে, যদি আপনি অ্যাপ শুরু করার সময় বা অন্য কোনও সময়ে হিপ ডাম্প পান, তাহলে আপনি লিক ট্রিগার করার জন্য শর্তগুলি সক্রিয় নাও করতে পারেন। সমস্যাটি পুনরায় তৈরি করার চেষ্টা করার সময় বিভিন্ন পরিস্থিতির মধ্য দিয়ে কাজ করার কথা বিবেচনা করুন:
কোন কোন বৈশিষ্ট্য সক্রিয় করা হয়?
ব্যবহারকারীর কোন নির্দিষ্ট ক্রিয়াগুলি লিককে ট্রিগার করে?
- আপনি কি এই ক্রমটি সক্রিয় করার জন্য একাধিক পুনরাবৃত্তি চেষ্টা করেছেন?
 
অ্যাপটি কোন জীবনচক্রের অবস্থার মধ্য দিয়ে গেছে?
- আপনি কি বিভিন্ন জীবনচক্রের অবস্থার মধ্য দিয়ে একাধিক পুনরাবৃত্তি চেষ্টা করেছেন?
 
SDK-এর সর্বশেষ সংস্করণে সমস্যাটি পুনরায় তৈরি করতে পারেন কিনা তা নিশ্চিত করুন। পূর্ববর্তী সংস্করণের সমস্যাটি ইতিমধ্যেই ঠিক করা হয়ে থাকতে পারে।
ধাপ ২: অ্যাপটির মেমোরি ব্যবহার প্রত্যাশিত কিনা তা পরীক্ষা করুন।
প্রতিটি বৈশিষ্ট্যের জন্য অতিরিক্ত মেমোরির প্রয়োজন হয়। বিভিন্ন পরিস্থিতি ডিবাগ করার সময়, বিবেচনা করুন যে এটি প্রত্যাশিত ব্যবহার হতে পারে কিনা নাকি এটি আসলে একটি মেমোরি লিক। উদাহরণস্বরূপ, বিভিন্ন বৈশিষ্ট্য বা ব্যবহারকারীর কাজের জন্য, নিম্নলিখিত সম্ভাবনাগুলি বিবেচনা করুন:
সম্ভবত একটি লিক: একাধিক পুনরাবৃত্তির মাধ্যমে দৃশ্যকল্প সক্রিয় করার ফলে সময়ের সাথে সাথে মেমরির ব্যবহার বৃদ্ধি পায়।
সম্ভাব্য প্রত্যাশিত মেমরি ব্যবহার : দৃশ্যকল্প বন্ধ হওয়ার পরে মেমরি পুনরুদ্ধার করা হয়।
সম্ভবত প্রত্যাশিত মেমোরি ব্যবহার : মেমোরি ব্যবহার কিছু সময়ের জন্য বৃদ্ধি পায় এবং তারপর কমতে থাকে। এটি একটি সীমাবদ্ধ ক্যাশে বা অন্যান্য প্রত্যাশিত মেমোরি ব্যবহারের কারণে হতে পারে।
যদি অ্যাপের আচরণটি সম্ভবত মেমোরি ব্যবহার বলে মনে হয়, তাহলে আপনার অ্যাপের মেমোরি পরিচালনা করে সমস্যাটি সমাধান করা যেতে পারে। সাহায্যের জন্য, আপনার অ্যাপের মেমোরি পরিচালনা করুন দেখুন।
ধাপ ৩: উচ্চ স্তরে ডিবাগ করুন
যখন আপনি মেমোরি লিক ডিবাগ করবেন, তখন উচ্চ স্তর থেকে শুরু করুন এবং সম্ভাবনাগুলি সংকুচিত করার পরে ড্রিল ডাউন করুন। সময়ের সাথে সাথে কোনও লিক আছে কিনা তা প্রথমে বিশ্লেষণ করতে এই উচ্চ-স্তরের ডিবাগিং সরঞ্জামগুলির একটি ব্যবহার করুন:
অ্যান্ড্রয়েড স্টুডিও মেমরি প্রোফাইলার (প্রস্তাবিত)
অ্যান্ড্রয়েড স্টুডিও মেমরি প্রোফাইলার
এই টুলটি আপনাকে ব্যবহৃত মেমোরির একটি ভিজ্যুয়াল হিস্টোগ্রাম দেয়। হিপ ডাম্প এবং অ্যালোকেশন ট্র্যাকিংও এই একই ইন্টারফেস থেকে ট্রিগার করা যেতে পারে। এই টুলটি ডিফল্ট সুপারিশ। আরও তথ্যের জন্য, Android Studio Memory Profiler দেখুন।
পারফেটো মেমোরি কাউন্টার
Perfetto আপনাকে বেশ কয়েকটি মেট্রিক্স ট্র্যাক করার উপর সুনির্দিষ্ট নিয়ন্ত্রণ দেয় এবং এটি একটি একক হিস্টোগ্রামে উপস্থাপন করে। আরও তথ্যের জন্য, Perfetto Memory Counters দেখুন।

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