একটি মসৃণ, স্থিতিশীল এবং ব্যাটারি-সাশ্রয়ী অ্যাপ অভিজ্ঞতা প্রদানের জন্য স্থিতিশীলতা, ইউআই রেন্ডারিং, মেমরি ব্যবহার, ব্যাকগ্রাউন্ডের কাজ, স্টার্টআপ ল্যাটেন্সি এবং বিল্ড অপটিমাইজেশন জুড়ে থাকা সাধারণ পারফরম্যান্সের প্রতিবন্ধকতাগুলো শনাক্ত ও সমাধান করা প্রয়োজন।
এই বিভাগের গাইডগুলিতে প্রতিটি ধরণের সমস্যার জন্য অ্যান্ড্রয়েড প্ল্যাটফর্মের অন্তর্নিহিত আচরণ ব্যাখ্যা করা হয়েছে এবং অ্যান্ড্রয়েড স্টুডিও প্রোফাইলার, পারফেটটো, লগক্যাট এবং ApplicationExitInfo মতো টুল ব্যবহার করে কীভাবে সেগুলি নির্ণয়, প্রোফাইল এবং প্রতিকার করতে হয়, তা ধাপে ধাপে দেখানো হয়েছে।
স্থিতিশীলতা
- ANRs : ব্লকড UI থ্রেড, মেইন-থ্রেড I/O, লক কনটেনশন, বা ধীরগতির ব্রডকাস্ট রিসিভারের কারণে সৃষ্ট অ্যাপ্লিকেশন নট রেসপন্ডিং (ANR) ত্রুটি নির্ণয় ও সমাধান করুন।
- ক্র্যাশ : স্ট্যাক ট্রেস পড়ুন, লগক্যাট আউটপুট পরীক্ষা করুন এবং অনিয়ন্ত্রিত ব্যতিক্রম ও নেটিভ সিগন্যাল প্রতিরোধ করুন।
রেন্ডারিং এবং স্টার্টআপ
- ধীর রেন্ডারিং : ব্যয়বহুল লেআউট, বাইন্ড পাস, বা মেইন-থ্রেড স্টলের কারণে ড্রপ হওয়া বা জমে যাওয়া UI ফ্রেম (
>16msএবং>700ms) শনাক্ত করুন এবং সমাধান করুন। - ধীরগতির সেশন (শুধুমাত্র গেমের ক্ষেত্রে) :
SurfaceFlingerদিয়ে ফ্রেম পেসিং পরিমাপ করুন এবং Android Frame Pacing (Swappy), Vulkan, ও Android Dynamic Performance Framework (ADPF) ব্যবহার করে গেমের ফ্রেম রেট অপ্টিমাইজ করুন। - অ্যাপ চালুর সময় : কোল্ড, ওয়ার্ম এবং হট লঞ্চের অভ্যন্তরীণ বিষয়গুলো বুঝুন, টাইম টু ইনিশিয়াল ডিসপ্লে (TTID) এবং টাইম টু ফুল ডিসপ্লে (TTFD) পরিমাপ করুন এবং স্টার্টআপের কাজ অপ্টিমাইজ করুন।
স্মৃতি ব্যবস্থাপনা
- লো মেমোরি কিলার (LMKs) : বুঝুন কিভাবে অ্যান্ড্রয়েড লো মেমোরি কিলার ডেমন (
lmkd)oom_adj_scoreএর মাধ্যমে প্রসেসগুলোকে অগ্রাধিকার দেয় এবং অ্যান্ড্রয়েড স্টুডিও, ইউনিটি ও আনরিয়েল ইঞ্জিনে মেমোরি ফুটপ্রিন্ট প্রোফাইল করে। - মেমরি ব্যবহার (অ্যানোনিমাস আরএসএস + সোয়াপ) : ফোরগ্রাউন্ড, সার্ভিস এবং ব্যাকগ্রাউন্ড অবস্থায় আপনার অ্যাপের অ্যানোনিমাস রেসিডেন্ট সেট সাইজ (আরএসএস) এবং সোয়াপ মেমরির ব্যবহার পরিমাপ করুন ও হ্রাস করুন।
- বিটম্যাপ মেমরি ব্যবহার : অতিরিক্ত বড় বা লিক হওয়া বিটম্যাপ অ্যালোকেশন শনাক্ত করুন এবং UI কম্পোনেন্টগুলো ব্যাকগ্রাউন্ডে চলে গেলে গ্রাফিক বাফারগুলো মুক্ত করুন।
ব্যাটারি এবং পটভূমির কাজ
- অতিরিক্ত ওয়েক লক : দীর্ঘ সময়ের জন্য আংশিক ওয়েক লক ধরে রাখা পরিহার করুন এবং ব্যাকগ্রাউন্ড টাস্কগুলোকে
WorkManagerবাJobSchedulerএ স্থানান্তর করুন। - আটকে থাকা আংশিক ওয়েক লক : নিশ্চিত করুন যে সমস্ত এক্সিকিউশন এবং এরর পাথ জুড়ে প্রতিটি অর্জিত আংশিক ওয়েক লক সঠিকভাবে রিলিজ করা হয়েছে।
- অতিরিক্ত ওয়েকআপ : নির্দিষ্ট অ্যালার্মের মাধ্যমে ওয়েকআপ কমান এবং নির্ধারিত ব্যাকগ্রাউন্ড কাজগুলোকে ব্যাচ করুন বা স্থগিত রাখুন।
- অতিরিক্ত ব্যাকগ্রাউন্ড ওয়াই-ফাই স্ক্যান : ব্যাকগ্রাউন্ড ওয়াই-ফাই স্ক্যানিংয়ের হার কমান এবং প্যাসিভ বা ব্যাচড লোকেশন ও কানেক্টিভিটি এপিআই ব্যবহার করুন।
- অতিরিক্ত ব্যাকগ্রাউন্ড নেটওয়ার্ক ব্যবহার :
WorkManagerকনস্ট্রেইন্ট ব্যবহার করে ব্যাকগ্রাউন্ড মোবাইল নেটওয়ার্ক ট্রান্সফারগুলোকে ব্যাচ করুন এবং স্থগিত রাখুন। - অতিরিক্ত ব্যাটারি ব্যবহার : সিপিইউ, সেন্সর এবং রেডিও অ্যাক্টিভিটি প্রোফাইলিং করে মোবাইল এবং Wear OS ডিভাইসে অতিরিক্ত ব্যাটারি খরচের কারণ নির্ণয় করুন।
অনুমতি এবং বিল্ড অপ্টিমাইজেশন
- অনুমতি অস্বীকৃতি : প্রাসঙ্গিকতার সাথে রানটাইম অনুমতির জন্য অনুরোধ করুন এবং ব্যবহারকারীদের কাছে অনুমতির কারণ স্পষ্টভাবে ব্যাখ্যা করুন।
- DEX কোড অপ্টিমাইজেশন : DEX-এর আকার কমাতে এবং রানটাইম পারফরম্যান্স উন্নত করতে R8 শ্রিংকিং, অবফাসকেশন এবং অপ্টিমাইজেশন নিয়মগুলি কনফিগার করুন।
একটি মসৃণ, স্থিতিশীল এবং ব্যাটারি-সাশ্রয়ী অ্যাপ অভিজ্ঞতা প্রদানের জন্য স্থিতিশীলতা, ইউআই রেন্ডারিং, মেমরি ব্যবহার, ব্যাকগ্রাউন্ডের কাজ, স্টার্টআপ ল্যাটেন্সি এবং বিল্ড অপটিমাইজেশন জুড়ে থাকা সাধারণ পারফরম্যান্সের প্রতিবন্ধকতাগুলো শনাক্ত ও সমাধান করা প্রয়োজন।
এই বিভাগের গাইডগুলিতে প্রতিটি ধরণের সমস্যার জন্য অ্যান্ড্রয়েড প্ল্যাটফর্মের অন্তর্নিহিত আচরণ ব্যাখ্যা করা হয়েছে এবং অ্যান্ড্রয়েড স্টুডিও প্রোফাইলার, পারফেটটো, লগক্যাট এবং ApplicationExitInfo মতো টুল ব্যবহার করে কীভাবে সেগুলি নির্ণয়, প্রোফাইল এবং প্রতিকার করতে হয়, তা ধাপে ধাপে দেখানো হয়েছে।
স্থিতিশীলতা
- ANRs : ব্লকড UI থ্রেড, মেইন-থ্রেড I/O, লক কনটেনশন, বা ধীরগতির ব্রডকাস্ট রিসিভারের কারণে সৃষ্ট অ্যাপ্লিকেশন নট রেসপন্ডিং (ANR) ত্রুটি নির্ণয় ও সমাধান করুন।
- ক্র্যাশ : স্ট্যাক ট্রেস পড়ুন, লগক্যাট আউটপুট পরীক্ষা করুন এবং অনিয়ন্ত্রিত ব্যতিক্রম ও নেটিভ সিগন্যাল প্রতিরোধ করুন।
রেন্ডারিং এবং স্টার্টআপ
- ধীর রেন্ডারিং : ব্যয়বহুল লেআউট, বাইন্ড পাস, বা মেইন-থ্রেড স্টলের কারণে ড্রপ হওয়া বা জমে যাওয়া UI ফ্রেম (
>16msএবং>700ms) শনাক্ত করুন এবং সমাধান করুন। - ধীরগতির সেশন (শুধুমাত্র গেমের ক্ষেত্রে) :
SurfaceFlingerদিয়ে ফ্রেম পেসিং পরিমাপ করুন এবং Android Frame Pacing (Swappy), Vulkan, ও Android Dynamic Performance Framework (ADPF) ব্যবহার করে গেমের ফ্রেম রেট অপ্টিমাইজ করুন। - অ্যাপ চালুর সময় : কোল্ড, ওয়ার্ম এবং হট লঞ্চের অভ্যন্তরীণ বিষয়গুলো বুঝুন, টাইম টু ইনিশিয়াল ডিসপ্লে (TTID) এবং টাইম টু ফুল ডিসপ্লে (TTFD) পরিমাপ করুন এবং স্টার্টআপের কাজ অপ্টিমাইজ করুন।
স্মৃতি ব্যবস্থাপনা
- লো মেমোরি কিলার (LMKs) : বুঝুন কিভাবে অ্যান্ড্রয়েড লো মেমোরি কিলার ডেমন (
lmkd)oom_adj_scoreএর মাধ্যমে প্রসেসগুলোকে অগ্রাধিকার দেয় এবং অ্যান্ড্রয়েড স্টুডিও, ইউনিটি ও আনরিয়েল ইঞ্জিনে মেমোরি ফুটপ্রিন্ট প্রোফাইল করে। - মেমরি ব্যবহার (অ্যানোনিমাস আরএসএস + সোয়াপ) : ফোরগ্রাউন্ড, সার্ভিস এবং ব্যাকগ্রাউন্ড অবস্থায় আপনার অ্যাপের অ্যানোনিমাস রেসিডেন্ট সেট সাইজ (আরএসএস) এবং সোয়াপ মেমরির ব্যবহার পরিমাপ করুন ও হ্রাস করুন।
- বিটম্যাপ মেমরি ব্যবহার : অতিরিক্ত বড় বা লিক হওয়া বিটম্যাপ অ্যালোকেশন শনাক্ত করুন এবং UI কম্পোনেন্টগুলো ব্যাকগ্রাউন্ডে চলে গেলে গ্রাফিক বাফারগুলো মুক্ত করুন।
ব্যাটারি এবং পটভূমির কাজ
- অতিরিক্ত ওয়েক লক : দীর্ঘ সময়ের জন্য আংশিক ওয়েক লক ধরে রাখা পরিহার করুন এবং ব্যাকগ্রাউন্ড টাস্কগুলোকে
WorkManagerবাJobSchedulerএ স্থানান্তর করুন। - আটকে থাকা আংশিক ওয়েক লক : নিশ্চিত করুন যে সমস্ত এক্সিকিউশন এবং এরর পাথ জুড়ে প্রতিটি অর্জিত আংশিক ওয়েক লক সঠিকভাবে রিলিজ করা হয়েছে।
- অতিরিক্ত ওয়েকআপ : নির্দিষ্ট অ্যালার্মের মাধ্যমে ওয়েকআপ কমান এবং নির্ধারিত ব্যাকগ্রাউন্ড কাজগুলোকে ব্যাচ করুন বা স্থগিত রাখুন।
- অতিরিক্ত ব্যাকগ্রাউন্ড ওয়াই-ফাই স্ক্যান : ব্যাকগ্রাউন্ড ওয়াই-ফাই স্ক্যানিংয়ের হার কমান এবং প্যাসিভ বা ব্যাচড লোকেশন ও কানেক্টিভিটি এপিআই ব্যবহার করুন।
- অতিরিক্ত ব্যাকগ্রাউন্ড নেটওয়ার্ক ব্যবহার :
WorkManagerকনস্ট্রেইন্ট ব্যবহার করে ব্যাকগ্রাউন্ড মোবাইল নেটওয়ার্ক ট্রান্সফারগুলোকে ব্যাচ করুন এবং স্থগিত রাখুন। - অতিরিক্ত ব্যাটারি ব্যবহার : সিপিইউ, সেন্সর এবং রেডিও অ্যাক্টিভিটি প্রোফাইলিং করে মোবাইল এবং Wear OS ডিভাইসে অতিরিক্ত ব্যাটারি খরচের কারণ নির্ণয় করুন।
অনুমতি এবং বিল্ড অপ্টিমাইজেশন
- অনুমতি অস্বীকৃতি : প্রাসঙ্গিকতার সাথে রানটাইম অনুমতির জন্য অনুরোধ করুন এবং ব্যবহারকারীদের কাছে অনুমতির কারণ স্পষ্টভাবে ব্যাখ্যা করুন।
- DEX কোড অপ্টিমাইজেশন : DEX-এর আকার কমাতে এবং রানটাইম পারফরম্যান্স উন্নত করতে R8 শ্রিংকিং, অবফাসকেশন এবং অপ্টিমাইজেশন নিয়মগুলি কনফিগার করুন।