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

পূর্বশর্ত
চালিয়ে যাওয়ার আগে, স্ক্রলিং ব্যানারের জন্য ইনলাইন অ্যাডাপ্টিভ ব্যবহার করুন ।
নির্ধারিত তালিকার অবস্থানগুলি ট্র্যাক করুন
আপনার ব্যবহারকারী যখন স্ক্রোল করেন, তখন ব্যানার রিসাইক্লিং মেমরিতে সীমিত সংখ্যক BannerAd ইনস্ট্যান্স ধরে রাখে এবং এই ইনস্ট্যান্সগুলোকে তালিকার বিভিন্ন অবস্থানের মধ্যে স্থানান্তর করে।
কোন বিজ্ঞাপনটি পুনরায় ব্যবহার করতে হবে তা জানতে, ক্যাশে থাকা প্রতিটি বিজ্ঞাপন তালিকার কোন অবস্থানটি দখল করে আছে তা ট্র্যাক করুন।
আপনার উইজেটে নিম্নলিখিত অবস্থা বজায় রাখুন:
-
BannerAdইনস্ট্যান্সের একটি নির্দিষ্ট আকারের ক্যাশে। আপনি ক্যাশের যে আকারটি নির্ধারণ করেন, তা হলো একবারে মেমরিতে ধারণ করা বিজ্ঞাপনের সর্বোচ্চ সংখ্যা। - একটি বিজ্ঞাপন ব্যবধান যা নির্ধারণ করে তালিকায় একটি বিজ্ঞাপন কত ঘন ঘন প্রদর্শিত হবে।
- একটি পজিশন
Mapক্লাস যা প্রতিটিBannerAdইনস্ট্যান্সকে তার বর্তমান লিস্ট পজিশনের সাথে যুক্ত করে। যখন আপনি কোনো বিজ্ঞাপন রিসাইকেল করেন, তখন এইMapক্লাসের এন্ট্রিটি আপডেট করে সর্বশেষ পজিশনটি নির্দেশ করা হয়। - একটি সাইজ
Mapক্লাস যা প্রতিটি লোড হওয়া বিজ্ঞাপনের জন্য প্ল্যাটফর্ম-নির্ধারিতAdSizeঅবজেক্ট সংরক্ষণ করে। বিজ্ঞাপন লোড হওয়ার পর, ইনলাইন অ্যাডাপ্টিভ ব্যানারের উচ্চতা জানা যায়।
নিম্নলিখিত উদাহরণটি ক্যাশে থাকা প্রতিটি বিজ্ঞাপনের জন্য নির্ধারিত তালিকার অবস্থান ট্র্যাক করে:
// Maximum number of banner ad instances kept in the cache.
static const int _cacheSize = 8;
// Spacing between banner ads. For example, index 0, 6, 12, and so on
// display ads.
static const int _adInterval = 6;
// The cache of allocated BannerAd instances.
final List<BannerAd> _banners = [];
// Maps each BannerAd instance to its currently assigned list item position.
final Map<BannerAd, int> _bannerPositions = {};
// Stores the platform-resolved size of each loaded banner ad.
final Map<BannerAd, AdSize> _bannerSizes = {};
ক্যাশের আকার নির্বাচন করুন
একই সময়ে স্ক্রিনে প্রদর্শিত হতে পারে এমন সর্বোচ্চ সংখ্যক বিজ্ঞাপনের চেয়ে ক্যাশে বড় করুন। যদি ক্যাশে সেই আকারের চেয়ে ছোট হয়, তাহলে রিসাইক্লিংয়ের জন্য নির্বাচিত বিজ্ঞাপনটি প্রায়শই দৃশ্যমান থাকে এবং আপনার অ্যাপ বিজ্ঞাপনগুলো পুনরায় ব্যবহার না করে অতিরিক্ত বিজ্ঞাপন বরাদ্দ করে।
সাইজ বেছে নিতে, নিম্নলিখিতগুলি করুন:
- ভিউপোর্টের উচ্চতাকে একটি বিজ্ঞাপন বিরতির উচ্চতা দিয়ে ভাগ করে অনুমান করুন, একবারে স্ক্রিনে কয়টি বিজ্ঞাপন ধরবে।
- দ্রুত স্ক্রোল করার সময় যে বিজ্ঞাপনগুলো আলাদা হয়ে যাচ্ছে, সেগুলোর জন্য জায়গা যোগ করুন।
- যদি দেখেন যে রিসাইক্লিংয়ের জন্য নির্বাচিত বিজ্ঞাপনগুলো এখনও স্ক্রিনে রয়েছে, তাহলে ক্যাশের আকার বাড়িয়ে দিন।
এই পৃষ্ঠার উদাহরণটি প্রতি ছয়টি সারিতে একটি করে বিজ্ঞাপন প্রদর্শন করে এবং আটটি বিজ্ঞাপনের একটি ক্যাশে ব্যবহার করে। এই উদাহরণটি একবারে স্ক্রিনে দৃশ্যমান অল্প কয়েকটি বিজ্ঞাপনের জন্য জায়গা রাখে।
স্ক্রিনে কোনো বিজ্ঞাপন আছে কিনা তা পরীক্ষা করুন
প্ল্যাটফর্ম ভিউ রেন্ডার করে এমন সমস্ত Google Mobile Ads Flutter Plugin ক্লাস AdWithView ক্লাসটি ইমপ্লিমেন্ট করে এবং একটি isMounted গেটার প্রদান করে। একটি ক্যাশ করা বিজ্ঞাপনকে তালিকার কোনো অবস্থানে পুনরায় অ্যাসাইন করার আগে, বিজ্ঞাপনটি স্ক্রিনের বাইরে স্ক্রল হয়ে গেছে এবং পুনরায় ব্যবহারের জন্য নিরাপদ কিনা তা নিশ্চিত করতে isMounted গেটারটি পরীক্ষা করুন।
একটি ব্যানার বিজ্ঞাপন পুনরুদ্ধার এবং পুনর্ব্যবহার করুন
যখন তালিকাটি কোনো নির্দিষ্ট পদের জন্য ব্যানারের অনুরোধ করে, তখন নিম্নলিখিত কাজগুলো করুন:
- ঐ পদের জন্য আগে থেকে নির্ধারিত বিজ্ঞাপনটি পুনরায় ব্যবহার করুন, যদি সেরকম কোনো বিজ্ঞাপন থেকে থাকে।
- ক্যাশে পূর্ণ না থাকলে, একটি বিজ্ঞাপনের জন্য অনুরোধ করুন।
- ক্যাশে পূর্ণ থাকলে, একটি ক্যাশ করা বিজ্ঞাপন নির্বাচন করুন এবং বিজ্ঞাপনটি পুনরায় বরাদ্দ করার আগে যাচাই করে নিন যে
isMountedগেটারটির মানfalseআছে। - উইজেট ট্রি থেকে উইজেটটি সরিয়ে ফেলার সময় ক্যাশে থাকা প্রতিটি বিজ্ঞাপনের উপর
dispose()মেথডটি কল করুন।
নিম্নলিখিত উদাহরণটি একটি ব্যানার বিজ্ঞাপন পুনরুদ্ধার এবং পুনর্ব্যবহার করে:
BannerAd _getRecycledBannerAd(BuildContext context, int bannerPosition) {
// 1. If an ad is already mapped to this position, reuse it.
final BannerAd? existingBanner = _bannerPositions.entries
.firstWhereOrNull((entry) => entry.value == bannerPosition)
?.key;
if (existingBanner != null) {
return existingBanner;
}
// 2. If the cache is not full, allocate a new ad instance.
if (_banners.length < _cacheSize) {
final BannerAd newBanner = _createBannerAd(context);
_banners.add(newBanner);
_bannerPositions[newBanner] = bannerPosition;
return newBanner;
}
// 3. Select an existing ad from the cache using modulo arithmetic.
final BannerAd targetBanner = _banners[bannerPosition % _cacheSize];
// 4. Verify the ad is detached from the screen before recycling.
if (targetBanner.isMounted) {
// If still on screen during fast scrolls, allocate a temporary instance.
return _createBannerAd(context);
} else {
// Safe to reuse: reassign to the new position.
_bannerPositions[targetBanner] = bannerPosition;
return targetBanner;
}
}
সম্পূর্ণ উদাহরণের জন্য, Google Mobile Ads Flutter Plugin উদাহরণটি দেখুন।