মেমরি পরিচালনার সর্বোত্তম অনুশীলন

এই ডকটি ধরে নেয় যে আপনি মেমরি ম্যানেজমেন্টের অধীনে অ্যান্ড্রয়েড অ্যাপ্লিকেশানগুলির জন্য সেরা-অনুশীলনের নির্দেশিকা অনুসরণ করেছেন, যেমন আপনার অ্যাপের মেমরি পরিচালনা করুন

ভূমিকা

একটি মেমরি লিক হল এক ধরনের রিসোর্স লিক যা ঘটে যখন একটি কম্পিউটার প্রোগ্রাম বরাদ্দ করা মেমরি প্রকাশ করে না যা আর প্রয়োজন হয় না। একটি ফাঁসের কারণে অ্যাপ্লিকেশনটি OS থেকে উপলব্ধের চেয়ে বেশি মেমরির অনুরোধ করতে পারে এবং এইভাবে অ্যাপ্লিকেশনটি ক্র্যাশ করতে পারে। অনেকগুলি অনুপযুক্ত অনুশীলন অ্যান্ড্রয়েড অ্যাপে মেমরি লিক হতে পারে, যেমন সম্পদের সঠিকভাবে নিষ্পত্তি না করা বা আর প্রয়োজন না হলে শ্রোতাদের নিবন্ধন না করা।

এই নথিটি আপনাকে আপনার কোডে মেমরি লিক প্রতিরোধ, সনাক্তকরণ এবং সমাধান করতে সহায়তা করার জন্য কিছু সেরা অনুশীলন সরবরাহ করে। আপনি যদি এই নথির পদ্ধতিগুলি চেষ্টা করে থাকেন এবং আমাদের SDK-তে মেমরি লিক হওয়ার সন্দেহ করেন, তাহলে দেখুন Google SDK-এর সাথে কীভাবে সমস্যাগুলি রিপোর্ট করবেন

আপনি সমর্থন যোগাযোগ করার আগে

আপনি Google সহায়তা টিমের কাছে একটি মেমরি লিক রিপোর্ট করার আগে, আপনার কোডে ত্রুটিটি নেই তা নিশ্চিত করতে এই নথিতে দেওয়া ডিবাগিং পদক্ষেপগুলির সাথে সর্বোত্তম অনুশীলনগুলি অনুসরণ করুন৷ এই পদক্ষেপগুলি আপনার সমস্যার সমাধান করতে পারে, এবং যদি সেগুলি না করে, তাহলে সেগুলি আপনাকে সাহায্য করার জন্য Google সহায়তা টিমের প্রয়োজনীয় তথ্য তৈরি করে৷

মেমরি লিক প্রতিরোধ

Google SDK ব্যবহার করে এমন কোডে মেমরি ফাঁসের কিছু সাধারণ কারণ এড়াতে সাহায্য করার জন্য এই সেরা অনুশীলনগুলি অনুসরণ করুন৷

অ্যান্ড্রয়েড অ্যাপের জন্য সেরা অনুশীলন

আপনি আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনে নিম্নলিখিত সমস্ত কাজ করেছেন কিনা তা পরীক্ষা করুন:

  1. অব্যবহৃত সম্পদ ছেড়ে দিন
  2. আর প্রয়োজন না হলে শ্রোতাদের নিবন্ধনমুক্ত করুন
  3. প্রয়োজন না হলে কাজগুলি বাতিল করুন
  4. রিসোর্স রিলিজ করার জন্য জীবনচক্র পদ্ধতি ফরওয়ার্ড করুন
  5. SDK-এর সর্বশেষ সংস্করণ ব্যবহার করুন

এই প্রতিটি অনুশীলনের জন্য নির্দিষ্ট বিবরণের জন্য, নিম্নলিখিত বিভাগগুলি দেখুন।

অব্যবহৃত সম্পদ ছেড়ে দিন

যখন আপনার অ্যান্ড্রয়েড অ্যাপ কোনো সম্পদ ব্যবহার করে, তখন রিসোর্সটি রিলিজ করতে ভুলবেন না যখন এটির আর প্রয়োজন হবে না। আপনি যদি তা না করেন, আপনার অ্যাপ্লিকেশনটি তাদের সাথে শেষ হওয়ার পরেও সংস্থানটি মেমরি গ্রহণ করতে থাকে। আরও তথ্যের জন্য, অ্যান্ড্রয়েড ডকুমেন্টেশনে কার্যকলাপ জীবনচক্র পর্যালোচনা করুন।

জিওএসডিকে-তে পুরানো GoogleMap রেফারেন্স প্রকাশ করুন

একটি সাধারণ ভুল হল ন্যাভিগেশনভিউ বা ম্যাপভিউ ব্যবহার করে ক্যাশে করা হলে GoogleMap একটি মেমরি লিক হতে পারে। একটি GoogleMap এর নেভিগেশন ভিউ বা ম্যাপভিউ এর সাথে 1 থেকে 1 সম্পর্ক রয়েছে যেখান থেকে এটি পুনরুদ্ধার করা হয়। আপনাকে অবশ্যই নিশ্চিত করতে হবে যে একটি GoogleMap ক্যাশে করা হয়নি, অথবা যখন NavigationView#onDestroy বা MapView#onDestroy কল করা হয় তখন রেফারেন্স প্রকাশ করা হয়। যদি ন্যাভিগেশন সাপোর্ট ফ্র্যাগমেন্ট, ম্যাপসাপোর্ট ফ্র্যাগমেন্ট বা আপনার নিজের ফ্র্যাগমেন্ট ব্যবহার করে এই দৃশ্যগুলি মোড়ানো হয়, তাহলে রেফারেন্সটি অবশ্যই ফ্র্যাগমেন্ট#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()
}

প্রয়োজন না হলে কাজগুলি বাতিল করুন

যখন একটি অ্যান্ড্রয়েড অ্যাপ একটি অ্যাসিঙ্ক্রোনাস কাজ শুরু করে, যেমন একটি ডাউনলোড বা একটি নেটওয়ার্ক অনুরোধ, নিশ্চিত করুন যে আপনি কাজটি শেষ হয়ে গেলে সেটি বাতিল করুন৷ যদি টাস্কটি বাতিল না করা হয়, তবে অ্যাপটি শেষ হওয়ার পরেও এটি ব্যাকগ্রাউন্ডে চলতে থাকে।

সেরা অনুশীলন সম্পর্কে আরও বিশদ বিবরণের জন্য, Android ডকুমেন্টেশনে আপনার অ্যাপের মেমরি পরিচালনা করুন দেখুন৷

রিসোর্স রিলিজ করার জন্য জীবনচক্র পদ্ধতিগুলিকে ফরওয়ার্ড করুন

আপনার অ্যাপ যদি নেভিগেশন বা মানচিত্র 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গুলি আপ-টু-ডেট রাখুন।

ডিবাগ মেমরি লিক

আপনি যদি এই ডকুমেন্টের আগে সমস্ত প্রযোজ্য পরামর্শ বাস্তবায়ন করার পরেও মেমরি লিক দেখতে পান, তাহলে ডিবাগ করতে এই প্রক্রিয়াটি অনুসরণ করুন।

আপনি শুরু করার আগে , Android কীভাবে মেমরি পরিচালনা করে তার সাথে আপনার পরিচিত হওয়া উচিত৷ তথ্যের জন্য, মেমরি ব্যবস্থাপনার অ্যান্ড্রয়েড ওভারভিউ পড়ুন।

মেমরি লিক ডিবাগ করতে, এই প্রক্রিয়াটি অনুসরণ করুন:

  1. সমস্যাটি পুনরায় তৈরি করুন । এই পদক্ষেপটি ডিবাগ করার জন্য অপরিহার্য।
  2. মেমরি ব্যবহার প্রত্যাশিত কিনা পরীক্ষা করুন . পরীক্ষা করে দেখুন যে বর্ধিত ব্যবহার যা একটি ফাঁস বলে মনে হচ্ছে তা আসলে আপনার অ্যাপ্লিকেশন চালানোর জন্য প্রয়োজনীয় মেমরি নয়।
  3. উচ্চ-স্তরে ডিবাগ করুন । আপনি ডিবাগ করতে ব্যবহার করতে পারেন এমন বেশ কয়েকটি ইউটিলিটি রয়েছে। তিনটি ভিন্ন স্ট্যান্ডার্ড টুল সেট অ্যান্ড্রয়েডের মেমরি সমস্যা ডিবাগ করতে সাহায্য করে: অ্যান্ড্রয়েড স্টুডিও, পারফেটো এবং অ্যান্ড্রয়েড ডিবাগ ব্রিজ (এডিবি) কমান্ড লাইন ইউটিলিটি।
  4. আপনার অ্যাপের মেমরি ব্যবহার পরীক্ষা করুন একটি হিপ ডাম্প এবং বরাদ্দ ট্র্যাকিং পান এবং তারপর এটি বিশ্লেষণ করুন।
  5. মেমরি লিক ঠিক করুন

নিম্নলিখিত বিভাগগুলি বিস্তারিতভাবে এই পদক্ষেপগুলি কভার করে৷

ধাপ 1: সমস্যাটি পুনরায় তৈরি করুন

আপনি যদি সমস্যাটি পুনরায় তৈরি করতে সক্ষম না হন তবে প্রথমে এমন পরিস্থিতি বিবেচনা করুন যা মেমরি লিক হতে পারে। একটি গাদা ডাম্পের দিকে সরাসরি ঝাঁপ দেওয়া কাজ করতে পারে, যদি আপনি জানেন যে সমস্যাটি পুনরায় তৈরি করা হয়েছে। যাইহোক, আপনি যদি অ্যাপ স্টার্টআপে একটি হিপ ডাম্প পান বা সময়মতো অন্য এলোমেলো পয়েন্ট পান, তাহলে আপনি লিক ট্রিগার করার শর্তগুলি সক্রিয় নাও করতে পারেন। সমস্যাটি পুনরায় তৈরি করার চেষ্টা করার সময় বিভিন্ন পরিস্থিতিতে কাজ করার কথা বিবেচনা করুন:

  • বৈশিষ্ট্যগুলির কোন সেট সক্রিয় করা হয়?

  • ব্যবহারকারীর কর্মের কোন সুনির্দিষ্ট ক্রম লিককে ট্রিগার করে?

    • আপনি এই ক্রম সক্রিয় করার একাধিক পুনরাবৃত্তি চেষ্টা করেছেন?
  • কোন লাইফ সাইকেল স্টেটের মাধ্যমে অ্যাপটি সাইকেল চালিয়েছে?

    • আপনি বিভিন্ন জীবনচক্র অবস্থার মাধ্যমে একাধিক পুনরাবৃত্তি চেষ্টা করেছেন?

নিশ্চিত করুন যে আপনি SDK-এর সর্বশেষ সংস্করণে সমস্যাটি পুনরায় তৈরি করতে পারেন। পূর্ববর্তী সংস্করণের সমস্যাটি ইতিমধ্যেই ঠিক করা হয়েছে।

ধাপ 2: অ্যাপের জন্য মেমরি ব্যবহার প্রত্যাশিত কিনা তা পরীক্ষা করুন

প্রতিটি বৈশিষ্ট্য অতিরিক্ত মেমরি প্রয়োজন. আপনি যখন বিভিন্ন পরিস্থিতিতে ডিবাগ করেন, তখন বিবেচনা করুন যে এটি প্রত্যাশিত ব্যবহার হতে পারে কিনা বা এটি আসলে একটি মেমরি লিক কিনা। উদাহরণস্বরূপ, বিভিন্ন বৈশিষ্ট্য বা ব্যবহারকারীর কাজের জন্য, নিম্নলিখিত সম্ভাবনাগুলি বিবেচনা করুন:

  • সম্ভবত একটি ফাঁস: একাধিক পুনরাবৃত্তির মাধ্যমে দৃশ্যকল্প সক্রিয় করার ফলে সময়ের সাথে সাথে মেমরির ব্যবহার বৃদ্ধি পায়।

  • সম্ভাব্য প্রত্যাশিত মেমরি ব্যবহার : দৃশ্যকল্প বন্ধ হওয়ার পরে মেমরি পুনরুদ্ধার করা হয়।

  • সম্ভবত প্রত্যাশিত মেমরি ব্যবহার : মেমরির ব্যবহার কিছু সময়ের জন্য বৃদ্ধি পায় তারপর বন্ধ হয়ে যায়। এটি একটি আবদ্ধ ক্যাশে বা অন্যান্য প্রত্যাশিত মেমরি ব্যবহারের কারণে হতে পারে।

যদি অ্যাপের আচরণটি সম্ভবত প্রত্যাশিত মেমরি ব্যবহার হয়, তাহলে আপনার অ্যাপের মেমরি পরিচালনা করে সমস্যাটি সমাধান করা যেতে পারে। সাহায্যের জন্য, আপনার অ্যাপের মেমরি পরিচালনা দেখুন।

ধাপ 3: উচ্চ স্তরে ডিবাগ করুন

আপনি যখন একটি মেমরি লিক ডিবাগ করেন, তখন একটি উচ্চ স্তরে শুরু করুন এবং তারপরে সম্ভাবনাগুলিকে সংকুচিত করার পরে ড্রিল ডাউন করুন৷ সময়ের সাথে লিক হলে প্রথমে বিশ্লেষণ করতে এই উচ্চ-স্তরের ডিবাগিং টুলগুলির মধ্যে একটি ব্যবহার করুন:

অ্যান্ড্রয়েড স্টুডিও মেমরি প্রোফাইলার

এই টুলটি আপনাকে গ্রাস করা মেমরির একটি ভিজ্যুয়াল হিস্টোগ্রাম দেয়। এই একই ইন্টারফেস থেকে হিপ ডাম্প এবং বরাদ্দ ট্র্যাকিংও ট্রিগার করা যেতে পারে। এই টুলটি ডিফল্ট সুপারিশ। আরও তথ্যের জন্য, অ্যান্ড্রয়েড স্টুডিও মেমরি প্রোফাইলার দেখুন।

পারফেটো মেমরি কাউন্টার

পারফেটো আপনাকে বেশ কয়েকটি মেট্রিক্স ট্র্যাক করার উপর সুনির্দিষ্ট নিয়ন্ত্রণ দেয় এবং এটি একটি একক হিস্টোগ্রামে উপস্থাপন করে। আরও তথ্যের জন্য, Perfetto মেমরি কাউন্টার দেখুন।

Perfetto user interface

অ্যান্ড্রয়েড ডিবাগ ব্রিজ (এডিবি) কমান্ড লাইন ইউটিলিটি

Perfetto দিয়ে আপনি যা ট্র্যাক করতে পারেন তার বেশিরভাগই একটি adb কমান্ড লাইন ইউটিলিটি হিসাবে উপলব্ধ যা আপনি সরাসরি জিজ্ঞাসা করতে পারেন। কয়েকটি গুরুত্বপূর্ণ উদাহরণ হল:

  • মেমিনফো আপনাকে সময়ে সময়ে বিস্তারিত মেমরি তথ্য দেখতে দেয়।

  • Procstats সময়ের সাথে কিছু গুরুত্বপূর্ণ সমষ্টিগত পরিসংখ্যান প্রদান করে।

এখানে দেখার জন্য একটি গুরুত্বপূর্ণ পরিসংখ্যান হল সর্বাধিক শারীরিক মেমরি ফুটপ্রিন্ট (maxRSS) যা অ্যাপটির সময়ের সাথে প্রয়োজন। MaxPSS হিসাবে সঠিক নাও হতে পারে. নির্ভুলতা বাড়ানোর উপায়ের জন্য, adb shell dumpsys procstats --help –start-testing পতাকা দেখুন।

বরাদ্দ ট্র্যাকিং

বরাদ্দ ট্র্যাকিং স্ট্যাক ট্রেস সনাক্ত করে যেখানে মেমরি বরাদ্দ করা হয়েছিল এবং যদি এটি মুক্ত করা না হয়। নেটিভ কোডে ফাঁস ট্র্যাক করার সময় এই পদক্ষেপটি বিশেষভাবে কার্যকর। যেহেতু এই টুলটি স্ট্যাক ট্রেস সনাক্ত করে, তাই এটি দ্রুত মূল কারণ ডিবাগ করার বা কীভাবে সমস্যাটি পুনরায় তৈরি করা যায় তা বের করার একটি দুর্দান্ত উপায় হতে পারে। বরাদ্দ ট্র্যাকিং ব্যবহার করার পদক্ষেপগুলির জন্য, বরাদ্দ ট্র্যাকিং সহ নেটিভ কোডে ডিবাগ মেমরি দেখুন।

ধাপ 4: একটি হিপ ডাম্প দিয়ে আপনার অ্যাপের মেমরি ব্যবহার পরীক্ষা করুন

একটি মেমরি লিক শনাক্ত করার একটি উপায় হল আপনার অ্যাপের একটি হিপ ডাম্প পাওয়া এবং তারপর এটি লিকের জন্য পরিদর্শন করা। একটি হিপ ডাম্প একটি অ্যাপের মেমরির সমস্ত বস্তুর একটি স্ন্যাপশট। এটি মেমরি লিক এবং অন্যান্য মেমরি-সম্পর্কিত সমস্যা নির্ণয় করতে ব্যবহার করা যেতে পারে।

অ্যান্ড্রয়েড স্টুডিও জিসি দ্বারা স্থিরযোগ্য নয় এমন মেমরি লিক সনাক্ত করতে পারে। আপনি যখন একটি হিপ ডাম্প ক্যাপচার করেন, তখন Android স্টুডিও চেক করে যে এমন কোনো কার্যকলাপ বা খণ্ড আছে যা এখনও পৌঁছানো যায় কিন্তু ইতিমধ্যেই ধ্বংস হয়ে গেছে।

  1. একটি গাদা ডাম্প ক্যাপচার .
  2. মেমরি লিক খুঁজে পেতে গাদা ডাম্প বিশ্লেষণ করুন .
  3. মেমরি লিক ঠিক করুন

বিস্তারিত জানার জন্য, নিম্নলিখিত বিভাগগুলি দেখুন।

একটি গাদা ডাম্প ক্যাপচার

একটি হিপ ডাম্প ক্যাপচার করতে, আপনি অ্যান্ড্রয়েড ডিবাগ ব্রিজ (এডিবি) বা অ্যান্ড্রয়েড স্টুডিও মেমরি প্রোফাইলার ব্যবহার করতে পারেন।

একটি হিপ ডাম্প ক্যাপচার করতে adb ব্যবহার করুন

adb ব্যবহার করে একটি হিপ ডাম্প ক্যাপচার করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. আপনার কম্পিউটারে আপনার অ্যান্ড্রয়েড ডিভাইস সংযোগ করুন.
  2. একটি কমান্ড প্রম্পট খুলুন এবং যে ডিরেক্টরিতে অ্যাডবি টুল রয়েছে সেখানে নেভিগেট করুন।
  3. একটি হিপ ডাম্প ক্যাপচার করতে, এই কমান্ডটি চালান:

    adb shell am dumpheap my.app.name $PHONE_FILE_OUT

  4. হিপ ডাম্প পুনরুদ্ধার করতে, এই কমান্ডটি চালান:

    adb pull $PHONE_FILE_OUT $LOCAL_FILE.

একটি হিপ ডাম্প ক্যাপচার করতে Android স্টুডিও ব্যবহার করুন

অ্যান্ড্রয়েড স্টুডিও মেমরি প্রোফাইলার ব্যবহার করে একটি হিপ ডাম্প ক্যাপচার করতে, অ্যান্ড্রয়েড ক্যাপচার একটি হিপডাম্প বিভাগে এই পদক্ষেপগুলি অনুসরণ করুন৷

মেমরি লিক খুঁজে পেতে হিপ ডাম্প বিশ্লেষণ করুন

একবার আপনি একটি হিপ ডাম্প ক্যাপচার করলে, আপনি এটি বিশ্লেষণ করতে অ্যান্ড্রয়েড স্টুডিও মেমরি প্রোফাইলার ব্যবহার করতে পারেন। এটি করার জন্য, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. অ্যান্ড্রয়েড স্টুডিওতে আপনার অ্যান্ড্রয়েড প্রকল্প খুলুন।

  2. রান নির্বাচন করুন এবং তারপর ডিবাগ কনফিগারেশন নির্বাচন করুন।

  3. অ্যান্ড্রয়েড প্রোফাইলার ট্যাব খুলুন।

  4. মেমরি নির্বাচন করুন।

  5. ওপেন হিপ ডাম্প নির্বাচন করুন এবং আপনার তৈরি করা হিপ ডাম্প ফাইলটি নির্বাচন করুন। মেমরি প্রোফাইলার আপনার অ্যাপের মেমরি ব্যবহারের একটি গ্রাফ প্রদর্শন করে।

  6. হিপ ডাম্প বিশ্লেষণ করতে গ্রাফ ব্যবহার করুন:

    • আর ব্যবহার করা হচ্ছে না যে বস্তু সনাক্ত করুন.

    • অনেক মেমরি ব্যবহার করে এমন বস্তু সনাক্ত করুন।

    • প্রতিটি বস্তু কত মেমরি ব্যবহার করছে দেখুন.

  7. মেমরি লিকের উৎসকে সংকুচিত করতে বা এটি ঠিক করতে এই তথ্যটি ব্যবহার করুন।

ধাপ 5: মেমরি লিক ঠিক করুন

একবার আপনি মেমরি ফাঁসের উত্স সনাক্ত করলে, আপনি এটি ঠিক করতে পারেন। আপনার Android অ্যাপ্লিকেশানগুলিতে মেমরির ফাঁস ঠিক করা আপনার অ্যাপ্লিকেশানগুলির কর্মক্ষমতা এবং স্থিতিশীলতা উন্নত করতে সাহায্য করে৷ দৃশ্যের উপর নির্ভর করে, বিবরণ পরিবর্তিত হয়। যাইহোক, নিম্নলিখিত পরামর্শ সাহায্য করতে পারে:

অন্যান্য ডিবাগিং টুল

এই পদক্ষেপগুলি সম্পূর্ণ হওয়ার পরে, আপনি যদি এখনও মেমরি লিক খুঁজে না পান এবং ঠিক না করেন তবে এই সরঞ্জামগুলি ব্যবহার করে দেখুন:

বরাদ্দ ট্র্যাকিং সহ নেটিভ কোডে মেমরি ডিবাগ করুন

এমনকি আপনি সরাসরি নেটিভ কোড ব্যবহার না করলেও, Google SDK সহ বেশ কিছু সাধারণ অ্যান্ড্রয়েড লাইব্রেরি করে। আপনি যদি মনে করেন যে আপনার মেমরি লিক নেটিভ কোডে আছে, তাহলে আপনি এটি ডিবাগ করতে ব্যবহার করতে পারেন এমন বেশ কয়েকটি টুল রয়েছে। Android Studio বা heaprofd (Perfetto এর সাথেও সামঞ্জস্যপূর্ণ) এর সাথে বরাদ্দ ট্র্যাকিং একটি মেমরি লিকের সম্ভাব্য কারণগুলি সনাক্ত করার একটি দুর্দান্ত উপায় এবং প্রায়শই ডিবাগ করার দ্রুততম উপায়।

বরাদ্দকরণ ট্র্যাকিং-এরও আলাদা সুবিধা রয়েছে যা আপনাকে সংবেদনশীল তথ্য অন্তর্ভুক্ত না করেই ফলাফল শেয়ার করতে দেয় যা একটি স্তূপে পাওয়া যায়।

LeakCanary দিয়ে ফাঁস সনাক্ত করুন

লিকক্যানারি অ্যান্ড্রয়েড অ্যাপে মেমরি লিক শনাক্ত করার জন্য একটি শক্তিশালী টুল। কিভাবে আপনার অ্যাপে LeakCanary ব্যবহার করবেন সে সম্পর্কে আরও জানতে, LeakCanary দেখুন।

Google SDK-এর সাথে কীভাবে সমস্যার রিপোর্ট করবেন

আপনি যদি এই নথির পদ্ধতিগুলি চেষ্টা করে থাকেন এবং আমাদের SDK-তে মেমরি লিক হওয়ার সন্দেহ করেন, তাহলে যতটা সম্ভব নিম্নলিখিত তথ্যের সাথে গ্রাহক সহায়তার সাথে যোগাযোগ করুন:

  • মেমরি লিক পুনরায় তৈরি করার পদক্ষেপ । যদি পদক্ষেপগুলির জন্য জটিল কোডিংয়ের প্রয়োজন হয়, তাহলে এটি আমাদের নমুনা অ্যাপে সমস্যাটিকে প্রতিলিপি করে এমন কোডটি অনুলিপি করতে সাহায্য করতে পারে এবং ফাঁসটি ট্রিগার করার জন্য UI-তে নেওয়া প্রয়োজন এমন অতিরিক্ত পদক্ষেপগুলি প্রদান করতে পারে৷

  • সমস্যাটি পুনরায় তৈরি করে আপনার অ্যাপ থেকে ক্যাপচার করা হিপ ডাম্প । সময়ের মধ্যে দুটি ভিন্ন পয়েন্টে হিপ ডাম্প ক্যাপচার করুন যা দেখায় যে মেমরি ব্যবহার যথেষ্ট পরিমাণে বৃদ্ধি পেয়েছে।

  • যদি একটি নেটিভ মেমরি ফাঁস প্রত্যাশিত হয় , heapprofd থেকে বরাদ্দ ট্র্যাকিং আউটপুট ভাগ করুন।

  • আপনি লিক অবস্থা পুনরায় তৈরি করার পরে নেওয়া একটি বাগ রিপোর্ট

  • কোনো মেমরি-সম্পর্কিত ক্র্যাশের স্ট্যাক ট্রেস

    গুরুত্বপূর্ণ দ্রষ্টব্য : স্ট্যাক ট্রেসগুলি সাধারণত একটি মেমরি সমস্যা ডিবাগ করার জন্য যথেষ্ট নয়, তাই নিশ্চিত করুন যে আপনি তথ্যের অন্যান্য ফর্মগুলির মধ্যে একটিও প্রদান করেছেন৷