মেমরি ব্যবহার অপ্টিমাইজ করুন

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

উচ্চ মেমরি খরচ অ্যাপ এবং সিস্টেম আচরণের সাথে সমস্যা সৃষ্টি করতে পারে যার মধ্যে রয়েছে:

  • অ্যাপটি নিজেই ধীর বা পিছিয়ে যেতে পারে, বা সবচেয়ে খারাপ ক্ষেত্রে, নিহত হতে পারে।
  • ব্যবহারকারী-দৃশ্যমান সিস্টেম পরিষেবাগুলি (ভলিউম কন্ট্রোল, পিকচার সেটিংস ড্যাশবোর্ড, ভয়েস অ্যাসিস্ট্যান্ট, ইত্যাদি) খুব পিছিয়ে যায় বা একেবারেই কাজ নাও করতে পারে৷
  • সিস্টেম উপাদান নিহত হতে পারে; এই উপাদানগুলি তারপর পুনরায় চালু করে, চরম সম্পদ বিরোধের স্পাইক ট্রিগার করে এবং সরাসরি ফোরগ্রাউন্ড অ্যাপকে প্রভাবিত করে।
  • লঞ্চারে স্থানান্তর উল্লেখযোগ্যভাবে বিলম্বিত হতে পারে, এবং রূপান্তর শেষ না হওয়া পর্যন্ত অগ্রভাগের অ্যাপটিকে প্রতিক্রিয়াহীন অবস্থায় রেখে দিন।
  • সিস্টেমটি একটি সরাসরি পুনরুদ্ধার পরিস্থিতিতে প্রবেশ করতে পারে , মেমরি বরাদ্দের জন্য অপেক্ষা করার সময় একটি থ্রেড এক্সিকিউশন সাময়িকভাবে বিরাম দিয়ে। এটি যেকোন থ্রেডের ক্ষেত্রে ঘটতে পারে যেমন প্রধান থ্রেড বা কোডেক সম্পর্কিত থ্রেডগুলি সম্ভাব্যভাবে অডিও এবং ভিডিও ফ্রেম ড্রপ এবং UI সমস্যা সৃষ্টি করে।

টিভি ডিভাইসে মেমরি বিবেচনা

টিভি ডিভাইসে সাধারণত ফোন বা ট্যাবলেটের তুলনায় যথেষ্ট কম মেমরি থাকে। উদাহরণস্বরূপ, একটি কনফিগারেশন যা আমরা টিভিতে দেখতে পাই তা হল 1 GB RAM এবং 1080p ভিডিও রেজোলিউশন । একই সময়ে, বেশিরভাগ টিভি অ্যাপের একই বৈশিষ্ট্য রয়েছে; তাই অনুরূপ বাস্তবায়ন এবং সাধারণ চ্যালেঞ্জ। এই দুটি পরিস্থিতি অন্যান্য ডিভাইসের ধরন এবং অ্যাপগুলিতে দেখা যায় না এমন সমস্যাগুলি উপস্থাপন করে:

  • মিডিয়া টিভি অ্যাপগুলি সাধারণত গ্রিডেড ইমেজ ভিউ এবং পূর্ণস্ক্রীন ব্যাকগ্রাউন্ড ইমেজ উভয়ের সমন্বয়ে গঠিত হয় যার জন্য অল্প সময়ের মধ্যে মেমরিতে প্রচুর ছবি লোড করতে হয়
  • টিভি অ্যাপ্লিকেশানগুলি মাল্টিমিডিয়া স্ট্রীম চালায় যা ভিডিও এবং অডিও চালানোর জন্য একটি নির্দিষ্ট পরিমাণ মেমরি বরাদ্দ করতে হয় এবং মসৃণ প্লেব্যাক নিশ্চিত করতে যথেষ্ট মিডিয়া বাফারের প্রয়োজন হয়।
  • অতিরিক্ত মিডিয়া বৈশিষ্ট্য (অনুসন্ধান, পর্ব পরিবর্তন, অডিও ট্র্যাক পরিবর্তন, ইত্যাদি) সঠিকভাবে প্রয়োগ করা না হলে অতিরিক্ত মেমরি চাপ নিতে পারে।

টিভি ডিভাইস বুঝুন

এই নির্দেশিকাটি প্রাথমিকভাবে অ্যাপ মেমরি ব্যবহার এবং কম RAM ডিভাইসের জন্য মেমরি লক্ষ্যের উপর ফোকাস করে।

টিভি ডিভাইসে, এই বৈশিষ্ট্যগুলি বিবেচনা করুন:

  • ডিভাইস মেমরি : ডিভাইসটি যে পরিমাণ র্যান্ডম অ্যাক্সেস মেমরি (RAM) ইনস্টল করেছে।
  • ডিভাইস UI রেজোলিউশন : ডিভাইসটি OS এবং অ্যাপ্লিকেশন UI রেন্ডার করতে যে রেজোলিউশন ব্যবহার করে; এটি সাধারণত ডিভাইসের ভিডিও রেজোলিউশনের চেয়ে কম।
  • ভিডিও রেজোলিউশন : ডিভাইসটি সর্বোচ্চ যে রেজোলিউশনে ভিডিও চালাতে পারে।

এটি বিভিন্ন ডিভাইসের ধরন এবং তাদের দ্বারা কীভাবে মেমরি ব্যবহার করা উচিত তা শ্রেণীবদ্ধ করে।

টিভি ডিভাইসের সারাংশ

ডিভাইস মেমরি ডিভাইস ভিডিও রেজোলিউশন ডিভাইস UI রেজোলিউশন isLowRAMDevice()
1 জিবি 1080p 720p হ্যাঁ
1.5 জিবি 2160p 1080p হ্যাঁ
≥1.5 জিবি 1080p 720p বা 1080p না*
≥2 জিবি 2160p 1080p না*

কম RAM টিভি ডিভাইস

এই ডিভাইসগুলি একটি মেমরি সীমাবদ্ধ অবস্থায় রয়েছে এবং ActivityManager.isLowRAMDevice() সত্য হিসাবে রিপোর্ট করবে৷ কম র‍্যাম টিভি ডিভাইসে চলমান অ্যাপ্লিকেশনগুলিকে অতিরিক্ত মেমরি নিয়ন্ত্রণ ব্যবস্থা প্রয়োগ করতে হবে৷

আমরা নিম্নলিখিত বৈশিষ্ট্যগুলির সাথে ডিভাইসগুলিকে এই বিভাগে পড়তে বিবেচনা করি:

  • 1 GB ডিভাইস : 1 GB RAM, 720p/HD (1280x720) UI রেজোলিউশন, 1080p/FullHD (1920x1080) ভিডিও রেজোলিউশন
  • 1.5 GB ডিভাইস : 1.5 GB RAM, 1080p/FullHD (1920x1080) UI রেজোলিউশন, 2160p/UltraHD/4K (3840x2160) ভিডিও রেজোলিউশন
  • অন্যান্য পরিস্থিতি যেখানে অতিরিক্ত মেমরির সীমাবদ্ধতার কারণে OEM ActivityManager.isLowRAMDevice() পতাকা সংজ্ঞায়িত করেছে।

নিয়মিত টিভি ডিভাইস

এই ডিভাইসগুলি যেমন একটি উল্লেখযোগ্য মেমরি চাপ পরিস্থিতি ভোগ করে না. আমরা এই ডিভাইসগুলির নিম্নলিখিত বৈশিষ্ট্যগুলি বিবেচনা করি:

  • ≥1.5 GB RAM, 720p বা 1080p UI এবং 1080p ভিডিও রেজোলিউশন
  • ≥2 GB RAM, 1080p UI এবং 1080p বা 2160p ভিডিও রেজোলিউশন

এর অর্থ এই নয় যে অ্যাপগুলিকে এই ডিভাইসগুলিতে মেমরি ব্যবহার সম্পর্কে যত্ন নেওয়া উচিত নয়, কারণ কিছু নির্দিষ্ট মেমরির অপব্যবহার এখনও উপলব্ধ মেমরিকে নিঃশেষ করতে পারে এবং খারাপভাবে পারফর্ম করতে পারে।

কম RAM টিভি ডিভাইসে মেমরি লক্ষ্য

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

মেমরি প্রোফাইলার

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

  • বেনামী + অদলবদল : অ্যান্ড্রয়েড স্টুডিওতে জাভা + নেটিভ + স্ট্যাক বরাদ্দ মেমরির সমন্বয়ে গঠিত।
  • গ্রাফিক্স : প্রফাইলার টুলে সরাসরি রিপোর্ট করা হয়েছে। সাধারণত গ্রাফিক্স টেক্সচারের সমন্বয়ে গঠিত।
  • ফাইল : অ্যান্ড্রয়েড স্টুডিওতে "কোড" + "অন্যান্য" বিভাগ হিসাবে রিপোর্ট করা হয়েছে।

এই সংজ্ঞাগুলির সাথে, নিম্নলিখিত টেবিলটি প্রতিটি ধরণের মেমরি গ্রুপের সর্বাধিক মানটি নির্দেশ করে:

মেমরি টাইপ উদ্দেশ্য ব্যবহারের লক্ষ্য (1 GB)
বেনামী + অদলবদল (জাভা + নেটিভ + স্ট্যাক) বরাদ্দ, মিডিয়া বাফার, ভেরিয়েবল এবং অন্যান্য মেমরি-নিবিড় কাজগুলির জন্য ব্যবহৃত হয়। < 160 MB
গ্রাফিক্স টেক্সচার এবং ডিসপ্লে সম্পর্কিত বাফারের জন্য GPU দ্বারা ব্যবহৃত হয় 30-40 এমবি
ফাইল মেমরিতে কোড পেজ এবং ফাইলের জন্য ব্যবহৃত হয়। 60-80 এমবি

সর্বাধিক মোট মেমরি (অ্যানন + অদলবদল + গ্রাফিক্স + ফাইল) নিম্নলিখিতগুলির বেশি হওয়া উচিত নয় :

  • 1 জিবি লো-র‍্যাম ডিভাইসের জন্য মোট মেমরি ব্যবহারের 280 MB ( Anon+Swap + Graphics + File )।

এটি অতিক্রম না করার জন্য দৃঢ়ভাবে সুপারিশ করা হয়:

  • 200 MB মেমরি ব্যবহার ( Anon+Swap + Graphics )।

ফাইল মেমরি

ফাইল ব্যাকড মেমরির জন্য সাধারণ নির্দেশিকা হিসাবে সচেতন থাকুন যে:

  • সাধারণভাবে ফাইল মেমরি ওএস মেমরি ম্যানেজমেন্ট দ্বারা ভালভাবে পরিচালিত হয়।
  • আমরা এই মুহুর্তে এটি মেমরির চাপের একটি বড় কারণ খুঁজে পাইনি।

যাইহোক, সাধারণভাবে ফাইল মেমরির সাথে কাজ করার সময়:

  • আপনার বিল্ডে অব্যবহৃত লাইব্রেরিগুলিকে অন্তর্ভুক্ত করবেন না এবং সম্ভব হলে সম্পূর্ণগুলির পরিবর্তে লাইব্রেরির ছোট উপসেটগুলি ব্যবহার করুন৷
  • মেমরিতে খোলা বড় ফাইলগুলি রাখবেন না এবং আপনার কাজ শেষ হওয়ার সাথে সাথে সেগুলি ছেড়ে দিন।
  • জাভা এবং কোটলিন ক্লাসের জন্য আপনার সংকলিত কোডের আকার ছোট করুন , সঙ্কুচিত দেখুন, অস্পষ্ট করুন এবং আপনার অ্যাপ গাইড অপ্টিমাইজ করুন

নির্দিষ্ট টিভি সুপারিশ

এই বিভাগটি টিভি ডিভাইসে মেমরি ব্যবহার অপ্টিমাইজ করার জন্য নির্দিষ্ট সুপারিশ প্রদান করে।

গ্রাফিক্স মেমরি

উপযুক্ত ইমেজ ফরম্যাট এবং রেজোলিউশন ব্যবহার করুন.

  • ডিভাইস UI রেজোলিউশনের চেয়ে বেশি রেজোলিউশনের ছবি লোড করবেন না। উদাহরণস্বরূপ, একটি 720p UI ডিভাইসে 1080p চিত্রগুলিকে 720p-এ ছোট করা উচিত।
  • সম্ভব হলে হার্ডওয়্যার-সমর্থিত বিটম্যাপ ব্যবহার করুন
    • গ্লাইডের মতো লাইব্রেরিতে, Downsampler.ALLOW_HARDWARE_CONFIG বৈশিষ্ট্য সক্রিয় করুন যা ডিফল্টরূপে অক্ষম থাকে৷ এটি সক্রিয় করা বিটম্যাপের নকল এড়ায় যা অন্যথায় গ্রাফিক্স মেমরি এবং বেনামী মেমরি উভয়েই থাকবে।
  • মধ্যবর্তী রেন্ডার এবং রি-রেন্ডার এড়িয়ে চলুন
    • এগুলিকে অ্যান্ড্রয়েড জিপিইউ ইন্সপেক্টর দিয়ে চিহ্নিত করা যেতে পারে:
    • চিত্রগুলির জন্য "টেক্সচার" বিভাগে দেখুন যেগুলি কেবলমাত্র উপাদানগুলি তৈরি করার পরিবর্তে চূড়ান্ত রেন্ডারের দিকে পদক্ষেপ, এটি সাধারণত একটি তথাকথিত "মধ্যবর্তী রেন্ডার"।
    • Android SDK অ্যাপ্লিকেশানগুলির জন্য আপনি প্রায়শই এই লেআউটের জন্য মধ্যবর্তী রেন্ডার নিষ্ক্রিয় করতে লেআউট ফ্ল্যাগ forceHasOverlappedRendering:false ব্যবহার করে এগুলি সরাতে পারেন৷
    • একটি দুর্দান্ত সম্পদ হিসাবে ওভারল্যাপিং রেন্ডারগুলিতে ওভারল্যাপিং রেন্ডারগুলি এড়িয়ে চলুন দেখুন৷
  • সম্ভব হলে প্লেসহোল্ডার ছবি লোড করা এড়িয়ে চলুন , প্লেসহোল্ডার টেক্সচারের জন্য @android:color/ অথবা @color ব্যবহার করুন।
  • যখন কম্পোজিশনটি অফলাইনে সঞ্চালিত হতে পারে তখন ডিভাইসে একাধিক ছবি কম্পোজ করা এড়িয়ে চলুন । ডাউনলোড করা ছবি থেকে ইমেজ কম্পোজিশন করার চেয়ে স্বতন্ত্র ছবি লোড করতে পছন্দ করুন
  • বিটম্যাপগুলির সাথে আরও ভাল ডিল করতে হ্যান্ডলিং বিটম্যাপ গাইড অনুসরণ করুন।

অ্যানন + অদলবদল মেমরি

Anon+Swap এন্ড্রয়েড স্টুডিও মেমরি প্রোফাইলারে নেটিভ + জাভা + স্ট্যাক বরাদ্দ নিয়ে গঠিত। ডিভাইসটি মেমরি সীমাবদ্ধ কিনা তা পরীক্ষা করতে ActivityManager.isLowMemoryDevice() ব্যবহার করুন এবং এই নির্দেশিকা অনুসরণ করে এই পরিস্থিতির সাথে মানিয়ে নিন।

  • মিডিয়া:
    • ডিভাইস RAM এবং ভিডিও প্লেব্যাক রেজোলিউশনের উপর নির্ভর করে মিডিয়া বাফারের জন্য একটি পরিবর্তনশীল আকার নির্দিষ্ট করুন । এটি ভিডিও প্লেব্যাকের 1 মিনিটের জন্য অ্যাকাউন্ট করা উচিত:
      1. 1 GB/1080p এর জন্য 40-60 MB
      2. 1.5 GB/1080p এর জন্য 60-80 MB
      3. 1.5 GB/2160p এর জন্য 80-100 MB
      4. 2 GB/2160p এর জন্য 100-120 MB
    • বেনামী মেমরির মোট পরিমাণ বৃদ্ধি রোধ করতে একটি পর্ব পরিবর্তন করার সময় বিনামূল্যে মিডিয়া মেমরি বরাদ্দ
    • আপনার অ্যাপ বন্ধ হয়ে গেলে অবিলম্বে মিডিয়া সংস্থানগুলি প্রকাশ করুন এবং বন্ধ করুন : অডিও এবং ভিডিও সংস্থানগুলি পরিচালনা করতে অ্যাক্টিভিটি লাইফসাইকেল কলব্যাকগুলি ব্যবহার করুন৷ আপনি যদি একটি অডিও অ্যাপ না হন, আপনার ক্রিয়াকলাপগুলিতে onStop() ঘটলে আপনার প্লেব্যাক বন্ধ করুন , আপনি যে সমস্ত কাজ করছেন তা সংরক্ষণ করুন এবং আপনার সংস্থানগুলিকে প্রকাশ করার জন্য সেট করুন। কাজের সময়সূচী করার জন্য আপনাকে পরে প্রয়োজন হতে পারে। চাকরি এবং অ্যালার্ম বিভাগটি দেখুন।
    • ভিডিও খোঁজার সময় বাফারের মেমরির দিকে মনোযোগ দিন : ব্যবহারকারীর জন্য ভিডিও প্রস্তুত করতে চাইলে বিকাশকারীরা প্রায়শই অতিরিক্ত 15-60 সেকেন্ড ভবিষ্যত সামগ্রী বরাদ্দ করে, কিন্তু এটি অতিরিক্ত মেমরি ওভারহেড তৈরি করে। সাধারণভাবে, ব্যবহারকারী নতুন ভিডিও অবস্থান নির্বাচন না করা পর্যন্ত ভবিষ্যতের বাফারের 5 সেকেন্ডের বেশি গ্রহণ করবেন না। চাওয়ার সময় আপনার যদি কঠোরভাবে অতিরিক্ত সময় প্রি-বাফার করার প্রয়োজন হয়, তাহলে নিশ্চিত করুন:
      • সময়ের আগে চাওয়া বাফারটি বরাদ্দ করুন এবং এটি পুনরায় ব্যবহার করুন।
      • বাফারের আকার 15-25 এমবি (ডিভাইস মেমরির উপর নির্ভর করে) এর বেশি হওয়া উচিত নয়।
  • বরাদ্দ:
    • আপনি বেনামী মেমরিতে ছবি সদৃশ করবেন না তা নিশ্চিত করতে গ্রাফিক্স মেমরি নির্দেশিকা ব্যবহার করুন
      • চিত্রগুলি প্রায়শই মেমরির সবচেয়ে বড় ব্যবহারকারী হয় তাই তাদের অনুলিপি ডিভাইসে অনেক চাপ দিতে পারে। ইমেজ গ্রিডভিউগুলির ভারী নেভিগেশনের সময় এটি বিশেষভাবে সত্য।
    • স্ক্রীন সরানোর সময় তাদের রেফারেন্স বাদ দিয়ে বরাদ্দ প্রকাশ করুন : বিটম্যাপ এবং অবজেক্টের পিছনে কোনও রেফারেন্স নেই তা নিশ্চিত করুন।
  • লাইব্রেরি:
    • নতুন যোগ করার সময় লাইব্রেরি থেকে প্রোফাইল মেমরি বরাদ্দ করুন , কারণ তারা অতিরিক্ত লাইব্রেরিও লোড করতে পারে, যা বরাদ্দও করতে পারে এবং বাইন্ডিং তৈরি করতে পারে।
  • নেটওয়ার্কিং:
    • অ্যাপ স্টার্টআপের সময় ব্লকিং নেটওয়ার্ক কলগুলি সঞ্চালন করবেন না , তারা অ্যাপ্লিকেশন শুরুর সময়কে ধীর করে দেয় এবং লঞ্চের সময় অতিরিক্ত মেমরি ওভারহেড তৈরি করে, যেখানে অ্যাপ লোড দ্বারা মেমরি বিশেষভাবে সীমাবদ্ধ থাকে। প্রথমে একটি লোডিং বা স্প্ল্যাশ স্ক্রীন দেখান এবং একবার UI চালু হয়ে গেলে নেটওয়ার্ক অনুরোধগুলি করুন৷

বাঁধাই

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

সাধারণ বাঁধাই এবং সর্বোত্তম অনুশীলন:

  • Play integrity API : ডিভাইসের অখণ্ডতা পরীক্ষা করতে ব্যবহৃত হয়
    • লোডিং স্ক্রীনের পরে এবং মিডিয়া প্লেব্যাকের আগে ডিভাইসের অখণ্ডতা পরীক্ষা করুন৷
    • কন্টেন্ট প্লে করার আগে PlayIntegrity StandardIntegrityManager এর রেফারেন্স রিলিজ করুন।
  • প্লে বিলিং লাইব্রেরি : Google Play ব্যবহার করে সাবস্ক্রিপশন এবং কেনাকাটা পরিচালনার জন্য ব্যবহৃত হয়
    • লোডিং স্ক্রীনের পরে লাইব্রেরি শুরু করুন এবং কোনো মিডিয়া চালানোর আগে সমস্ত বিলিং কাজ পরিচালনা করুন।
    • লাইব্রেরি ব্যবহার করার সময় এবং সর্বদা ভিডিও বা মিডিয়া চালানোর আগে BillingClient.endConnection() ব্যবহার করুন।
    • পরিষেবাটি বিচ্ছিন্ন হয়েছে কিনা তা পরীক্ষা করতে BillingClient.isReady() এবং BillingClient.getConnectionState() ব্যবহার করুন যদি কোনো বিলিং কাজ আবার করতে হয়, এবং তারপর শেষ করার পরে আবার BillingClient.endConnection() করুন৷
  • জিএমএস ফন্ট প্রদানকারী
    • ফন্ট প্রদানকারী ব্যবহার করার পরিবর্তে স্বল্প-র্যাম ডিভাইসে স্বতন্ত্র ফন্টগুলি ব্যবহার করতে পছন্দ করুন, কারণ ফন্টগুলি ডাউনলোড করা ব্যয়বহুল এবং ফন্টপ্রভাইডার এটি করতে পরিষেবাগুলিকে আবদ্ধ করবে৷
  • গুগল অ্যাসিস্ট্যান্ট লাইব্রেরি: কখনও কখনও অনুসন্ধান এবং অ্যাপ-মধ্যস্থ অনুসন্ধানের জন্য ব্যবহৃত হয়, যদি সম্ভব হয়, এই লাইব্রেরিটি প্রতিস্থাপন করুন।
    • লিনব্যাক অ্যাপের জন্য : জিবোর্ড টেক্সট টু স্পিচ বা androidx.leanback লাইব্রেরি ব্যবহার করুন।
      • অনুসন্ধান বাস্তবায়নের জন্য অনুসন্ধান নির্দেশিকা অনুসরণ করুন।
      • দ্রষ্টব্য: লিনব্যাক বন্ধ করা হয়েছে এবং অ্যাপগুলিকে টিভি রচনায় সরানো উচিত।
    • কম্পোজ অ্যাপের জন্য :
      • ভয়েস সার্চ কার্যকর করতে Gboard টেক্সট টু স্পিচ ব্যবহার করুন।
    • আপনার অ্যাপে মিডিয়া বিষয়বস্তু আবিষ্কারযোগ্য করতে পরবর্তী ওয়াচ প্রয়োগ করুন।

ফোরগ্রাউন্ড পরিষেবা

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

অ্যান্ড্রয়েড টিভি এবং গুগল টিভিতে, ফোরগ্রাউন্ড পরিষেবাগুলি শুধুমাত্র একবার ব্যবহারকারী অ্যাপটি ছেড়ে দিলেই চলতে দেওয়া হয়:

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

চাকরি এবং অ্যালার্ম

WorkManager হল অত্যাধুনিক অ্যান্ড্রয়েড এপিআই যা পটভূমিতে পুনরাবৃত্ত কাজের সময় নির্ধারণের জন্য। WorkManager নতুন JobScheduler ব্যবহার করবে যখন উপলব্ধ হবে (SDK 23+) এবং পুরানো AlarmManager না থাকলে। টিভিতে নির্ধারিত কাজ সম্পাদন করার সেরা অনুশীলনের জন্য এই সুপারিশগুলি অনুসরণ করুন:

  • SDK 23+ এ AlarmManager APIs ব্যবহার করা এড়িয়ে চলুন , বিশেষ করে AlarmManager.set() , AlarmManager.setExact() এবং অনুরূপ পদ্ধতি, কারণ তারা সিস্টেমকে কাজ চালানোর জন্য সঠিক সময় নির্ধারণ করতে দেয় না (উদাহরণস্বরূপ, যখন ডিভাইসটি অলস)।
  • কম র‍্যাম ডিভাইসে, কঠোরভাবে প্রয়োজন না হলে কাজ চালানো এড়িয়ে চলুন। যদি প্রয়োজন হয়, শুধুমাত্র প্লেব্যাকের পরে সুপারিশ আপডেট করার জন্য WorkManager WorkRequest ব্যবহার করুন এবং অ্যাপটি খোলা থাকা অবস্থায় তা করার চেষ্টা করুন।
  • সময় উপযুক্ত হলে সিস্টেমকে আপনার কাজগুলি চালানোর জন্য ওয়ার্কম্যানেজার Constraints সংজ্ঞায়িত করুন:

কোটলিন

Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.setRequiresStorageNotLow(true)
.setRequiresDeviceIdle(true)
.build()

জাভা

Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.setRequiresStorageNotLow(true)
.setRequiresDeviceIdle(true)
.build()
  • যদি আপনাকে নিয়মিত কাজ চালাতে হয় (উদাহরণস্বরূপ, অন্য ডিভাইসে আপনার অ্যাপে ব্যবহারকারীর বিষয়বস্তু দেখার কার্যকলাপের উপর ভিত্তি করে পরবর্তী ওয়াচ নেক্সট আপডেট করতে), তাহলে কাজের মেমরি খরচ 30 এমবি-এর নিচে রেখে মেমরি ব্যবহার কম রাখুন।

অন্যান্য সাধারণ নির্দেশিকা

নিম্নলিখিত নির্দেশিকাগুলি অ্যান্ড্রয়েড অ্যাপ বিকাশের সাধারণ তথ্য প্রদান করে:

  • অবজেক্ট অ্যালোকেশন মিনিমাইজ করুন, অবজেক্টের পুনঃব্যবহার অপ্টিমাইজ করুন এবং যেকোন অব্যবহৃত বস্তুকে অবিলম্বে ডি-অ্যালোকেট করুন।
    • বস্তুর রেফারেন্স ধরে রাখবেন না , বিশেষ করে বিটম্যাপ।
    • System.gc() এবং ডাইরেক্ট রিলিজ মেমরি কল ব্যবহার করা এড়িয়ে চলুন কারণ এগুলো সিস্টেমের মেমরি হ্যান্ডলিং প্রক্রিয়ায় হস্তক্ষেপ করে: উদাহরণ হিসেবে, zRAM ব্যবহার করা ডিভাইসে, gc() কে জোরপূর্বক কল কম্প্রেশন এবং ডিকম্প্রেশনের কারণে সাময়িকভাবে মেমরির ব্যবহার বাড়াতে পারে। স্মৃতি
    • LazyList ব্যবহার করুন যেমন কম্পোজ বা RecyclerView এ একটি ক্যাটালগ ব্রাউজারে প্রদর্শিত দৃশ্যগুলিকে পুনরায় ব্যবহার করতে এবং তালিকার উপাদানগুলিকে পুনরায় তৈরি না করতে এখন অবচ্যুত Leanback UI টুলকিটে।
    • ক্যাশে স্থানীয়ভাবে বাহ্যিক বিষয়বস্তু প্রদানকারীর কাছ থেকে পড়া উপাদান যা অতিরিক্ত বাহ্যিক মেমরি বরাদ্দ করতে বাধা দেয় এমন আপডেট করার সময় পরিবর্তন এবং সংজ্ঞায়িত করার সম্ভাবনা নেই।
  • সম্ভাব্য মেমরি লিক জন্য পরীক্ষা করুন.
    • সাধারণ মেমরি ফাঁসের ক্ষেত্রে সতর্ক থাকুন যেমন বেনামী থ্রেডের মধ্যে রেফারেন্স, ভিডিও বাফারের পুনঃবন্টন যা কখনই মুক্তি পায় না এবং অন্যান্য অনুরূপ পরিস্থিতি।
    • মেমরি লিক ডিবাগ করতে হিপ ডাম্প ব্যবহার করুন।
  • কোল্ড স্টার্টে আপনার অ্যাপটি কার্যকর করার সময় ঠিক সময়ে সংকলনের পরিমাণ কমাতে বেসলাইন প্রোফাইল তৈরি করুন।

টুল সারাংশ

,

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

উচ্চ মেমরি খরচ অ্যাপ এবং সিস্টেম আচরণের সাথে সমস্যা সৃষ্টি করতে পারে যার মধ্যে রয়েছে:

  • অ্যাপটি নিজেই ধীর বা পিছিয়ে যেতে পারে, বা সবচেয়ে খারাপ ক্ষেত্রে, নিহত হতে পারে।
  • ব্যবহারকারী-দৃশ্যমান সিস্টেম পরিষেবাগুলি (ভলিউম কন্ট্রোল, পিকচার সেটিংস ড্যাশবোর্ড, ভয়েস অ্যাসিস্ট্যান্ট, ইত্যাদি) খুব পিছিয়ে যায় বা একেবারেই কাজ নাও করতে পারে৷
  • সিস্টেম উপাদান নিহত হতে পারে; এই উপাদানগুলি তারপর পুনরায় চালু করে, চরম সম্পদ বিরোধের স্পাইক ট্রিগার করে এবং সরাসরি ফোরগ্রাউন্ড অ্যাপকে প্রভাবিত করে।
  • লঞ্চারে স্থানান্তর উল্লেখযোগ্যভাবে বিলম্বিত হতে পারে, এবং রূপান্তর শেষ না হওয়া পর্যন্ত অগ্রভাগের অ্যাপটিকে প্রতিক্রিয়াহীন অবস্থায় রেখে দিন।
  • সিস্টেমটি একটি সরাসরি পুনরুদ্ধার পরিস্থিতিতে প্রবেশ করতে পারে , মেমরি বরাদ্দের জন্য অপেক্ষা করার সময় একটি থ্রেড এক্সিকিউশন সাময়িকভাবে বিরাম দিয়ে। এটি যেকোন থ্রেডের ক্ষেত্রে ঘটতে পারে যেমন প্রধান থ্রেড বা কোডেক সম্পর্কিত থ্রেডগুলি সম্ভাব্যভাবে অডিও এবং ভিডিও ফ্রেম ড্রপ এবং UI সমস্যা সৃষ্টি করে।

টিভি ডিভাইসে মেমরি বিবেচনা

টিভি ডিভাইসে সাধারণত ফোন বা ট্যাবলেটের তুলনায় যথেষ্ট কম মেমরি থাকে। উদাহরণস্বরূপ, একটি কনফিগারেশন যা আমরা টিভিতে দেখতে পাই তা হল 1 GB RAM এবং 1080p ভিডিও রেজোলিউশন । একই সময়ে, বেশিরভাগ টিভি অ্যাপের একই বৈশিষ্ট্য রয়েছে; তাই অনুরূপ বাস্তবায়ন এবং সাধারণ চ্যালেঞ্জ। এই দুটি পরিস্থিতি অন্যান্য ডিভাইসের ধরন এবং অ্যাপগুলিতে দেখা যায় না এমন সমস্যাগুলি উপস্থাপন করে:

  • মিডিয়া টিভি অ্যাপগুলি সাধারণত গ্রিডেড ইমেজ ভিউ এবং পূর্ণস্ক্রীন ব্যাকগ্রাউন্ড ইমেজ উভয়ের সমন্বয়ে গঠিত হয় যার জন্য অল্প সময়ের মধ্যে মেমরিতে প্রচুর ছবি লোড করতে হয়
  • টিভি অ্যাপ্লিকেশানগুলি মাল্টিমিডিয়া স্ট্রীম চালায় যা ভিডিও এবং অডিও চালানোর জন্য একটি নির্দিষ্ট পরিমাণ মেমরি বরাদ্দ করতে হয় এবং মসৃণ প্লেব্যাক নিশ্চিত করতে যথেষ্ট মিডিয়া বাফারের প্রয়োজন হয়।
  • অতিরিক্ত মিডিয়া বৈশিষ্ট্য (অনুসন্ধান, পর্ব পরিবর্তন, অডিও ট্র্যাক পরিবর্তন, ইত্যাদি) সঠিকভাবে প্রয়োগ করা না হলে অতিরিক্ত মেমরি চাপ নিতে পারে।

টিভি ডিভাইস বুঝুন

এই নির্দেশিকাটি প্রাথমিকভাবে অ্যাপ মেমরি ব্যবহার এবং কম RAM ডিভাইসের জন্য মেমরি লক্ষ্যের উপর ফোকাস করে।

টিভি ডিভাইসে, এই বৈশিষ্ট্যগুলি বিবেচনা করুন:

  • ডিভাইস মেমরি : ডিভাইসটি যে পরিমাণ র্যান্ডম অ্যাক্সেস মেমরি (RAM) ইনস্টল করেছে।
  • ডিভাইস UI রেজোলিউশন : ডিভাইসটি OS এবং অ্যাপ্লিকেশন UI রেন্ডার করতে যে রেজোলিউশন ব্যবহার করে; এটি সাধারণত ডিভাইসের ভিডিও রেজোলিউশনের চেয়ে কম।
  • ভিডিও রেজোলিউশন : ডিভাইসটি সর্বোচ্চ যে রেজোলিউশনে ভিডিও চালাতে পারে।

এটি বিভিন্ন ডিভাইসের ধরন এবং তাদের দ্বারা কীভাবে মেমরি ব্যবহার করা উচিত তা শ্রেণীবদ্ধ করে।

টিভি ডিভাইসের সারাংশ

ডিভাইস মেমরি ডিভাইস ভিডিও রেজোলিউশন ডিভাইস UI রেজোলিউশন isLowRAMDevice()
1 জিবি 1080p 720p হ্যাঁ
1.5 জিবি 2160p 1080p হ্যাঁ
≥1.5 জিবি 1080p 720p বা 1080p না*
≥2 জিবি 2160p 1080p না*

কম RAM টিভি ডিভাইস

এই ডিভাইসগুলি একটি মেমরি সীমাবদ্ধ অবস্থায় রয়েছে এবং ActivityManager.isLowRAMDevice() সত্য হিসাবে রিপোর্ট করবে৷ কম র‍্যাম টিভি ডিভাইসে চলমান অ্যাপ্লিকেশনগুলিকে অতিরিক্ত মেমরি নিয়ন্ত্রণ ব্যবস্থা প্রয়োগ করতে হবে৷

আমরা নিম্নলিখিত বৈশিষ্ট্যগুলির সাথে ডিভাইসগুলিকে এই বিভাগে পড়তে বিবেচনা করি:

  • 1 GB ডিভাইস : 1 GB RAM, 720p/HD (1280x720) UI রেজোলিউশন, 1080p/FullHD (1920x1080) ভিডিও রেজোলিউশন
  • 1.5 GB ডিভাইস : 1.5 GB RAM, 1080p/FullHD (1920x1080) UI রেজোলিউশন, 2160p/UltraHD/4K (3840x2160) ভিডিও রেজোলিউশন
  • অন্যান্য পরিস্থিতি যেখানে অতিরিক্ত মেমরির সীমাবদ্ধতার কারণে OEM ActivityManager.isLowRAMDevice() পতাকা সংজ্ঞায়িত করেছে।

নিয়মিত টিভি ডিভাইস

এই ডিভাইসগুলি যেমন একটি উল্লেখযোগ্য মেমরি চাপ পরিস্থিতি ভোগ করে না. আমরা এই ডিভাইসগুলির নিম্নলিখিত বৈশিষ্ট্যগুলি বিবেচনা করি:

  • ≥1.5 GB RAM, 720p বা 1080p UI এবং 1080p ভিডিও রেজোলিউশন
  • ≥2 GB RAM, 1080p UI এবং 1080p বা 2160p ভিডিও রেজোলিউশন

এর অর্থ এই নয় যে অ্যাপগুলিকে এই ডিভাইসগুলিতে মেমরি ব্যবহার সম্পর্কে যত্ন নেওয়া উচিত নয়, কারণ কিছু নির্দিষ্ট মেমরির অপব্যবহার এখনও উপলব্ধ মেমরিকে নিঃশেষ করতে পারে এবং খারাপভাবে পারফর্ম করতে পারে।

কম RAM টিভি ডিভাইসে মেমরি লক্ষ্য

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

মেমরি প্রোফাইলার

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

  • বেনামী + অদলবদল : অ্যান্ড্রয়েড স্টুডিওতে জাভা + নেটিভ + স্ট্যাক বরাদ্দ মেমরির সমন্বয়ে গঠিত।
  • গ্রাফিক্স : প্রফাইলার টুলে সরাসরি রিপোর্ট করা হয়েছে। সাধারণত গ্রাফিক্স টেক্সচারের সমন্বয়ে গঠিত।
  • ফাইল : অ্যান্ড্রয়েড স্টুডিওতে "কোড" + "অন্যান্য" বিভাগ হিসাবে রিপোর্ট করা হয়েছে।

এই সংজ্ঞাগুলির সাথে, নিম্নলিখিত টেবিলটি প্রতিটি ধরণের মেমরি গ্রুপের সর্বাধিক মানটি নির্দেশ করে:

মেমরি টাইপ উদ্দেশ্য ব্যবহারের লক্ষ্য (1 GB)
বেনামী + অদলবদল (জাভা + নেটিভ + স্ট্যাক) বরাদ্দ, মিডিয়া বাফার, ভেরিয়েবল এবং অন্যান্য মেমরি-নিবিড় কাজগুলির জন্য ব্যবহৃত হয়। < 160 MB
গ্রাফিক্স টেক্সচার এবং ডিসপ্লে সম্পর্কিত বাফারের জন্য GPU দ্বারা ব্যবহৃত হয় 30-40 এমবি
ফাইল মেমরিতে কোড পেজ এবং ফাইলের জন্য ব্যবহৃত হয়। 60-80 এমবি

সর্বাধিক মোট মেমরি (অ্যানন + অদলবদল + গ্রাফিক্স + ফাইল) নিম্নলিখিতগুলির বেশি হওয়া উচিত নয় :

  • 1 জিবি লো-র‍্যাম ডিভাইসের জন্য মোট মেমরি ব্যবহারের 280 MB ( Anon+Swap + Graphics + File )।

এটি অতিক্রম না করার জন্য দৃঢ়ভাবে সুপারিশ করা হয়:

  • 200 MB মেমরি ব্যবহার ( Anon+Swap + Graphics )।

ফাইল মেমরি

ফাইল ব্যাকড মেমরির জন্য সাধারণ নির্দেশিকা হিসাবে সচেতন থাকুন যে:

  • সাধারণভাবে ফাইল মেমরি ওএস মেমরি ম্যানেজমেন্ট দ্বারা ভালভাবে পরিচালনা করা হয়।
  • আমরা এই মুহুর্তে এটি মেমরির চাপের একটি বড় কারণ খুঁজে পাইনি।

যাইহোক, সাধারণভাবে ফাইল মেমরির সাথে কাজ করার সময়:

  • আপনার বিল্ডে অব্যবহৃত লাইব্রেরিগুলিকে অন্তর্ভুক্ত করবেন না এবং সম্ভব হলে সম্পূর্ণগুলির পরিবর্তে লাইব্রেরির ছোট উপসেটগুলি ব্যবহার করুন৷
  • মেমরিতে খোলা বড় ফাইলগুলি রাখবেন না এবং আপনার কাজ শেষ হওয়ার সাথে সাথে সেগুলি ছেড়ে দিন।
  • জাভা এবং কোটলিন ক্লাসের জন্য আপনার সংকলিত কোডের আকার ছোট করুন , সঙ্কুচিত দেখুন, অস্পষ্ট করুন এবং আপনার অ্যাপ গাইড অপ্টিমাইজ করুন

নির্দিষ্ট টিভি সুপারিশ

এই বিভাগটি টিভি ডিভাইসে মেমরি ব্যবহার অপ্টিমাইজ করার জন্য নির্দিষ্ট সুপারিশ প্রদান করে।

গ্রাফিক্স মেমরি

উপযুক্ত ইমেজ ফরম্যাট এবং রেজোলিউশন ব্যবহার করুন.

  • ডিভাইস UI রেজোলিউশনের চেয়ে বেশি রেজোলিউশনের ছবি লোড করবেন না। উদাহরণস্বরূপ, একটি 720p UI ডিভাইসে 1080p চিত্রগুলিকে 720p-এ ছোট করা উচিত।
  • সম্ভব হলে হার্ডওয়্যার-সমর্থিত বিটম্যাপ ব্যবহার করুন
    • গ্লাইডের মতো লাইব্রেরিতে, Downsampler.ALLOW_HARDWARE_CONFIG বৈশিষ্ট্য সক্রিয় করুন যা ডিফল্টরূপে অক্ষম থাকে৷ এটি সক্রিয় করা বিটম্যাপের নকল এড়ায় যা অন্যথায় গ্রাফিক্স মেমরি এবং বেনামী মেমরি উভয়েই থাকবে।
  • মধ্যবর্তী রেন্ডার এবং রি-রেন্ডার এড়িয়ে চলুন
    • এগুলিকে অ্যান্ড্রয়েড জিপিইউ ইন্সপেক্টর দিয়ে চিহ্নিত করা যেতে পারে:
    • চিত্রগুলির জন্য "টেক্সচার" বিভাগে দেখুন যেগুলি কেবলমাত্র উপাদানগুলি তৈরি করার পরিবর্তে চূড়ান্ত রেন্ডারের দিকে পদক্ষেপ, এটি সাধারণত একটি তথাকথিত "মধ্যবর্তী রেন্ডার"।
    • Android SDK অ্যাপ্লিকেশানগুলির জন্য আপনি প্রায়শই এই লেআউটের জন্য মধ্যবর্তী রেন্ডার নিষ্ক্রিয় করতে লেআউট ফ্ল্যাগ forceHasOverlappedRendering:false ব্যবহার করে এগুলি সরাতে পারেন৷
    • একটি দুর্দান্ত সম্পদ হিসাবে ওভারল্যাপিং রেন্ডারগুলিতে ওভারল্যাপিং রেন্ডারগুলি এড়িয়ে চলুন দেখুন৷
  • সম্ভব হলে প্লেসহোল্ডার ছবি লোড করা এড়িয়ে চলুন , প্লেসহোল্ডার টেক্সচারের জন্য @android:color/ অথবা @color ব্যবহার করুন।
  • যখন কম্পোজিশনটি অফলাইনে সঞ্চালিত হতে পারে তখন ডিভাইসে একাধিক ছবি কম্পোজ করা এড়িয়ে চলুন । ডাউনলোড করা ছবি থেকে ইমেজ কম্পোজিশন করার চেয়ে স্বতন্ত্র ছবি লোড করতে পছন্দ করুন
  • বিটম্যাপগুলির সাথে আরও ভাল ডিল করতে হ্যান্ডলিং বিটম্যাপ গাইড অনুসরণ করুন।

অ্যানন + অদলবদল মেমরি

Anon+Swap এন্ড্রয়েড স্টুডিও মেমরি প্রোফাইলারে নেটিভ + জাভা + স্ট্যাক বরাদ্দ নিয়ে গঠিত। ডিভাইসটি মেমরি সীমাবদ্ধ কিনা তা পরীক্ষা করতে ActivityManager.isLowMemoryDevice() ব্যবহার করুন এবং এই নির্দেশিকা অনুসরণ করে এই পরিস্থিতির সাথে মানিয়ে নিন।

  • মিডিয়া:
    • ডিভাইস RAM এবং ভিডিও প্লেব্যাক রেজোলিউশনের উপর নির্ভর করে মিডিয়া বাফারের জন্য একটি পরিবর্তনশীল আকার নির্দিষ্ট করুন । এটি ভিডিও প্লেব্যাকের 1 মিনিটের জন্য অ্যাকাউন্ট করা উচিত:
      1. 1 GB/1080p এর জন্য 40-60 MB
      2. 1.5 GB/1080p এর জন্য 60-80 MB
      3. 1.5 GB/2160p এর জন্য 80-100 MB
      4. 2 GB/2160p এর জন্য 100-120 MB
    • বেনামী মেমরির মোট পরিমাণ বৃদ্ধি রোধ করতে একটি পর্ব পরিবর্তন করার সময় বিনামূল্যে মিডিয়া মেমরি বরাদ্দ
    • আপনার অ্যাপ বন্ধ হয়ে গেলে অবিলম্বে মিডিয়া সংস্থানগুলি প্রকাশ করুন এবং বন্ধ করুন : অডিও এবং ভিডিও সংস্থানগুলি পরিচালনা করতে অ্যাক্টিভিটি লাইফসাইকেল কলব্যাকগুলি ব্যবহার করুন৷ আপনি যদি একটি অডিও অ্যাপ না হন, আপনার ক্রিয়াকলাপগুলিতে onStop() ঘটলে আপনার প্লেব্যাক বন্ধ করুন , আপনি যে সমস্ত কাজ করছেন তা সংরক্ষণ করুন এবং আপনার সংস্থানগুলিকে প্রকাশ করার জন্য সেট করুন। কাজের সময়সূচী করার জন্য আপনাকে পরে প্রয়োজন হতে পারে। চাকরি এবং অ্যালার্ম বিভাগটি দেখুন।
    • ভিডিও খোঁজার সময় বাফারের মেমরির দিকে মনোযোগ দিন : ব্যবহারকারীর জন্য ভিডিও প্রস্তুত করতে চাইলে বিকাশকারীরা প্রায়শই অতিরিক্ত 15-60 সেকেন্ড ভবিষ্যত সামগ্রী বরাদ্দ করে, কিন্তু এটি অতিরিক্ত মেমরি ওভারহেড তৈরি করে। সাধারণভাবে, ব্যবহারকারী নতুন ভিডিও অবস্থান নির্বাচন না করা পর্যন্ত ভবিষ্যতের বাফারের 5 সেকেন্ডের বেশি গ্রহণ করবেন না। চাওয়ার সময় আপনার যদি কঠোরভাবে অতিরিক্ত সময় প্রি-বাফার করার প্রয়োজন হয়, তাহলে নিশ্চিত করুন:
      • সময়ের আগে চাওয়া বাফারটি বরাদ্দ করুন এবং এটি পুনরায় ব্যবহার করুন।
      • বাফারের আকার 15-25 এমবি (ডিভাইস মেমরির উপর নির্ভর করে) এর বেশি হওয়া উচিত নয়।
  • বরাদ্দ:
    • আপনি বেনামী মেমরিতে ছবি সদৃশ করবেন না তা নিশ্চিত করতে গ্রাফিক্স মেমরি নির্দেশিকা ব্যবহার করুন
      • চিত্রগুলি প্রায়শই মেমরির সবচেয়ে বড় ব্যবহারকারী হয় তাই তাদের অনুলিপি ডিভাইসে অনেক চাপ দিতে পারে। ইমেজ গ্রিডভিউগুলির ভারী নেভিগেশনের সময় এটি বিশেষভাবে সত্য।
    • স্ক্রীন সরানোর সময় তাদের রেফারেন্স বাদ দিয়ে বরাদ্দ প্রকাশ করুন : বিটম্যাপ এবং অবজেক্টের পিছনে কোনও রেফারেন্স নেই তা নিশ্চিত করুন।
  • লাইব্রেরি:
    • নতুন যোগ করার সময় লাইব্রেরি থেকে প্রোফাইল মেমরি বরাদ্দ করুন , কারণ তারা অতিরিক্ত লাইব্রেরিও লোড করতে পারে, যা বরাদ্দও করতে পারে এবং বাইন্ডিং তৈরি করতে পারে।
  • নেটওয়ার্কিং:
    • অ্যাপ স্টার্টআপের সময় ব্লকিং নেটওয়ার্ক কলগুলি সঞ্চালন করবেন না , তারা অ্যাপ্লিকেশন শুরুর সময়কে ধীর করে দেয় এবং লঞ্চের সময় অতিরিক্ত মেমরি ওভারহেড তৈরি করে, যেখানে অ্যাপ লোড দ্বারা মেমরি বিশেষভাবে সীমাবদ্ধ থাকে। প্রথমে একটি লোডিং বা স্প্ল্যাশ স্ক্রীন দেখান এবং একবার UI চালু হয়ে গেলে নেটওয়ার্ক অনুরোধগুলি করুন৷

বাঁধাই

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

সাধারণ বাঁধাই এবং সর্বোত্তম অনুশীলন:

  • Play integrity API : ডিভাইসের অখণ্ডতা পরীক্ষা করতে ব্যবহৃত হয়
    • লোডিং স্ক্রীনের পরে এবং মিডিয়া প্লেব্যাকের আগে ডিভাইসের অখণ্ডতা পরীক্ষা করুন৷
    • কন্টেন্ট প্লে করার আগে PlayIntegrity StandardIntegrityManager এর রেফারেন্স রিলিজ করুন।
  • প্লে বিলিং লাইব্রেরি : Google Play ব্যবহার করে সাবস্ক্রিপশন এবং কেনাকাটা পরিচালনার জন্য ব্যবহৃত হয়
    • লোডিং স্ক্রীনের পরে লাইব্রেরি শুরু করুন এবং কোনো মিডিয়া চালানোর আগে সমস্ত বিলিং কাজ পরিচালনা করুন।
    • লাইব্রেরি ব্যবহার করার সময় এবং সর্বদা ভিডিও বা মিডিয়া চালানোর আগে BillingClient.endConnection() ব্যবহার করুন।
    • পরিষেবাটি বিচ্ছিন্ন হয়েছে কিনা তা পরীক্ষা করতে BillingClient.isReady() এবং BillingClient.getConnectionState() ব্যবহার করুন যদি কোনো বিলিং কাজ আবার করতে হয়, এবং তারপর শেষ করার পরে আবার BillingClient.endConnection() করুন৷
  • জিএমএস ফন্ট প্রদানকারী
    • ফন্ট প্রদানকারী ব্যবহার করার পরিবর্তে স্বল্প-র্যাম ডিভাইসে স্বতন্ত্র ফন্টগুলি ব্যবহার করতে পছন্দ করুন, কারণ ফন্টগুলি ডাউনলোড করা ব্যয়বহুল এবং ফন্টপ্রভাইডার এটি করতে পরিষেবাগুলিকে আবদ্ধ করবে৷
  • গুগল অ্যাসিস্ট্যান্ট লাইব্রেরি: কখনও কখনও অনুসন্ধান এবং অ্যাপ-মধ্যস্থ অনুসন্ধানের জন্য ব্যবহৃত হয়, যদি সম্ভব হয়, এই লাইব্রেরিটি প্রতিস্থাপন করুন।
    • লিনব্যাক অ্যাপের জন্য : জিবোর্ড টেক্সট টু স্পিচ বা androidx.leanback লাইব্রেরি ব্যবহার করুন।
      • অনুসন্ধান বাস্তবায়নের জন্য অনুসন্ধান নির্দেশিকা অনুসরণ করুন।
      • দ্রষ্টব্য: লিনব্যাক বন্ধ করা হয়েছে এবং অ্যাপগুলিকে টিভি রচনায় সরানো উচিত।
    • কম্পোজ অ্যাপের জন্য :
      • ভয়েস সার্চ কার্যকর করতে Gboard টেক্সট টু স্পিচ ব্যবহার করুন।
    • আপনার অ্যাপে মিডিয়া বিষয়বস্তু আবিষ্কারযোগ্য করতে পরবর্তী ওয়াচ প্রয়োগ করুন।

ফোরগ্রাউন্ড পরিষেবা

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

অ্যান্ড্রয়েড টিভি এবং গুগল টিভিতে, ফোরগ্রাউন্ড পরিষেবাগুলি শুধুমাত্র একবার ব্যবহারকারী অ্যাপটি ছেড়ে দিলেই চলতে দেওয়া হয়:

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

চাকরি এবং অ্যালার্ম

WorkManager হ'ল ব্যাকগ্রাউন্ড পুনরাবৃত্ত কাজের সময় নির্ধারণের জন্য অত্যাধুনিক অ্যান্ড্রয়েড এপিআই। ওয়ার্কম্যানেজার যখন উপলব্ধ (এসডিকে 23+) এবং পুরানো AlarmManager যখন তা না হয় তখন নতুন JobScheduler ব্যবহার করবে। টিভিতে নির্ধারিত কাজ সম্পাদন করা সেরা অনুশীলনের জন্য এই সুপারিশগুলি অনুসরণ করুন:

  • এসডিকে 23+, বিশেষত AlarmManager.set() , AlarmManager.setExact() এবং অনুরূপ পদ্ধতিগুলিতে AlarmManager এপিআইগুলি ব্যবহার করা এড়িয়ে চলুন , কারণ তারা সিস্টেমকে কাজগুলি চালানোর জন্য যথাযথ সময়টি সিদ্ধান্ত নিতে দেয় না (উদাহরণ হিসাবে, কখন, কখন ডিভাইসটি অলস)।
  • লো-র‌্যাম ডিভাইসে, কঠোরভাবে প্রয়োজন না হলে চাকরি চালানো এড়িয়ে চলুন। যদি প্রয়োজন হয় তবে প্লেব্যাকের পরে সুপারিশগুলি আপডেট করার জন্য ওয়ার্কম্যানেজার WorkRequest ব্যবহার করুন এবং অ্যাপটি এখনও খোলা থাকাকালীন এটি করার চেষ্টা করুন।
  • সময় উপযুক্ত হলে সিস্টেমটিকে আপনার কাজগুলি চালানোর জন্য ওয়ার্কম্যানেজার Constraints সংজ্ঞায়িত করুন:

কোটলিন

Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.setRequiresStorageNotLow(true)
.setRequiresDeviceIdle(true)
.build()

জাভা

Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.setRequiresStorageNotLow(true)
.setRequiresDeviceIdle(true)
.build()
  • যদি আপনাকে অবশ্যই নিয়মিত চাকরি চালাতে হয় (উদাহরণস্বরূপ, অন্য ডিভাইসে আপনার অ্যাপ্লিকেশনটিতে কোনও ব্যবহারকারীর সামগ্রী দেখার ক্রিয়াকলাপের উপর ভিত্তি করে পরবর্তী ঘড়ির আপডেট করতে), তবে 30 এমবি এর নীচে কাজের মেমরির খরচ রেখে মেমরির ব্যবহারকে কমিয়ে রাখুন।

অন্যান্য সাধারণ নির্দেশিকা

নিম্নলিখিত নির্দেশিকা অ্যান্ড্রয়েড অ্যাপ্লিকেশন বিকাশের জন্য সাধারণ তথ্য সরবরাহ করে:

  • অবজেক্ট বরাদ্দকে হ্রাস করুন, অবজেক্ট পুনরায় ব্যবহারকে অনুকূল করুন এবং তাত্ক্ষণিকভাবে কোনও অব্যবহৃত অবজেক্টকে ডি-বরাদ্দ করুন।
    • অবজেক্টস, বিশেষত বিটম্যাপগুলির রেফারেন্স রাখবেন না
    • System.gc() ব্যবহার করা এড়িয়ে চলুন এবং সরাসরি রিলিজ মেমরি কলগুলি সিস্টেমের মেমরি হ্যান্ডলিং প্রক্রিয়াটিতে হস্তক্ষেপ করার সাথে সাথে: উদাহরণস্বরূপ, জেডআরএএম ব্যবহার করে ডিভাইসগুলিতে, gc() এ জোর করে কল () অস্থায়ীভাবে মেমরির ব্যবহার বাড়িয়ে তুলতে পারে কারণ স্মৃতি
    • LazyList ব্যবহার করুন যেমন একটি ক্যাটালগ ব্রাউজারে রচনা বা RecyclerView একটি ক্যাটালগ ব্রাউজারে প্রদর্শিত বা পুনর্ব্যবহারযোগ্য লিনব্যাক ইউআই টুলকিটের মতামতগুলি পুনর্নির্মাণ করতে এবং তালিকার উপাদানগুলি পুনরায় তৈরি না করার জন্য।
    • বহিরাগত বিষয়বস্তু সরবরাহকারীদের কাছ থেকে ক্যাশে স্থানীয়ভাবে উপাদানগুলি পড়েন যা অতিরিক্ত বাহ্যিক মেমরি বরাদ্দ রোধ করে এমন আপডেটগুলি পরিবর্তন এবং সংজ্ঞায়িত করার সম্ভাবনা কম।
  • সম্ভাব্য মেমরি ফাঁসের জন্য পরীক্ষা করুন।
    • বেনামে থ্রেডের অভ্যন্তরে রেফারেন্স, ভিডিও বাফারগুলির পুনর্নির্মাণ যা কখনই প্রকাশিত হয় না এবং অন্যান্য অনুরূপ পরিস্থিতিগুলির মতো সাধারণ মেমরি ফাঁস কেসগুলির জন্য নজর রাখুন
    • মেমরি ফাঁস ডিবাগ করতে হিপ ডাম্প ব্যবহার করুন।
  • ঠান্ডা শুরুতে আপনার অ্যাপটি কার্যকর করার সময় কেবল ইন-টাইম সংকলনের পরিমাণ হ্রাস করতে বেসলাইন প্রোফাইল তৈরি করুন।

সরঞ্জাম সংক্ষিপ্তসার