ওয়েক লক ব্যবহারের ক্ষেত্র শনাক্ত ও অপ্টিমাইজ করা

এই ডকুমেন্ট আপনার অ্যাপে ওয়েক লক ব্যবহারের ক্ষেত্র শনাক্ত ও অপ্টিমাইজ করতে সাহায্য করে, পাশাপাশি এই ব্যবহারের ক্ষেত্রের সাথে যুক্ত অন্যান্য লাইব্রেরি বা সিস্টেম API-এর মাধ্যমে অর্জিত ওয়েক লক থাকলে তা হাইলাইট করে। এইসব ওয়েক লক আপনার অ্যাপের সাথে সম্পর্কিত, তাই সমস্যাযুক্ত ওয়েক লকের সোর্স চিহ্নিত করা কঠিন হতে পারে। API-এর ভুল ব্যবহারের ফলে আপনার অ্যাপকে অতিরিক্ত ওয়েক লক ব্যবহারের জন্য ফ্ল্যাগ করা হতে পারে, এমনকি আপনি স্পষ্টভাবে ওয়েক লক না পেলেও।

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

এই ডকুমেন্ট ওয়েক লক পাওয়ার সাধারণ ব্যবহারের ক্ষেত্রগুলি বর্ণনা করে, বিভিন্ন API এবং লাইব্রেরি দ্বারা ব্যবহৃত ওয়েক লকের নামগুলি বিস্তারিতভাবে জানায় এবং ওয়েক লকের ব্যবহার অপ্টিমাইজ ও কমানোর জন্য সাজেশন এবং পেশাদার পদ্ধতি প্রদান করে।

AlarmManager

AlarmManager ওয়েক লক অ্যাকোয়ার করে এবং কলিং অ্যাপে অ্যাট্রিবিউট করে। অ্যালার্ম বন্ধ হয়ে গেলে AlarmManager ওয়েক লক অ্যাকোয়ার করে এবং অ্যালার্ম ব্রডকাস্টের onReceive() পদ্ধতি এক্সিকিউট করা শেষ হলে লক রিলিজ করে।

ওয়েক লকের নাম

AlarmManager, *alarm* নামের ওয়েক লক তৈরি করে। (অ্যাস্টেরিস্ক হল ওয়েক লকের নামের অংশ, এটি ওয়াইল্ড কার্ডকে বোঝায় না।)

সাজেশন

অ্যালার্মের আচরণ অপ্টিমাইজ করার জন্য আমরা নিম্নলিখিত পদ্ধতিগুলি সাজেস্ট করি:

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

অডিও এবং মিডিয়া

অডিও রেকর্ড বা চালানোর সময় মিডিয়া API ওয়েক লক অ্যাকোয়ার করতে পারে। ওয়েক লক কলিং অ্যাপের সাথে অ্যাট্রিবিউট করা হয়।

ওয়েক লকের নাম

Media API বিভিন্ন নামে ওয়েক লক অ্যাকোয়ার করে যা Audio দিয়ে শুরু হয়:

  • AudioBitPerfect: লসলেস USB অডিও প্লেব্যাকের জন্য ব্যবহার করা হয়।
  • AudioDirectOut: টিভি বা বিশেষ ডিভাইসে লসলেস অডিও প্লেব্যাকের জন্য ব্যবহার করা হয়।
  • AudioDup: ব্লুটুথ বা USB ব্যবহার করে কানেক্ট করার সময় বিজ্ঞপ্তির প্লেব্যাকের জন্য ব্যবহার করা হয়।
  • AudioIn: মাইক্রোফোন চালু থাকা অবস্থায় ক্যামকর্ডার মোডে অডিও ক্যাপচার করার জন্য ব্যবহার করা হয়।
  • AudioMix: সাধারণ ডিভাইসে অডিও প্লেব্যাকের জন্য ব্যবহার করা হয়।
  • AudioOffload: এই মোড কাজ করে এমন অ্যাপের ক্ষেত্রে, দীর্ঘ সময় ধরে শুধু মিউজিক প্লেব্যাকের জন্য ব্যবহার করা হয়।
  • AudioSpatial: স্পেশিয়াল অডিও কাজ করে এমন ডিভাইসে মাল্টি-চ্যানেল সিনেমা বা মিউজিক অডিও প্লেব্যাক করার জন্য ব্যবহার করা হয়।
  • AudioUnknown: অন্যান্য পরিস্থিতি প্রযোজ্য না হলে ব্যবহার করা হয়।
  • MmapCapture: কম-লেটেন্সি অডিও ক্যাপচার করার জন্য ব্যবহার করা হয়।
  • MmapPlayback: কম-লেটেন্সি প্লেব্যাকের জন্য ব্যবহার করা হয়, যেমন গেমিং বা পেশাদার অডিও অ্যাপ্লিকেশনের জন্য।

সাজেশন

আমরা নিম্নলিখিত পদ্ধতিগুলি সাজেস্ট করি:

  • Audio দিয়ে শুরু হয় এমন ওয়েক লকের নাম ঘোষণা করবেন না।
  • আপনি মিডিয়া API ব্যবহার করলে, সরাসরি ওয়েক লক অ্যাকোয়ার করার প্রয়োজন নেই; প্রয়োজনীয় ওয়েক লক অ্যাকোয়ার করার জন্য আপনি API-এর উপর ভরসা করতে পারেন।
  • মিডিয়া API ব্যবহার করার সময়, মিডিয়া সেশন এবং সংশ্লিষ্ট ফোরগ্রাউন্ড সার্ভিস আর প্রয়োজন না হলে তা বন্ধ করে দিন।

ব্লুটুথ

ব্লুটুথ অ্যাকশন চলাকালীন প্ল্যাটফর্ম ব্লুটুথ API মূলত কার্নেল ওয়েক লক ধরে রাখে, যা অ্যাপ্লিকেশনের জন্য প্রযোজ্য নয়।

সাজেশন

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

ডিভাইস সেন্সর

স্টেপ কাউন্ট, অ্যাকসিলরোমিটার বা জাইরোস্কোপ ডেটার মতো ডিভাইস সেন্সর ডেটা ট্র্যাক করার একাধিক পদ্ধতি আছে।

Wear OS-এ, উচ্চতা, হার্ট রেট ও অতিক্রান্ত দূরত্বের মতো ডিভাইস ডেটা পেতে Wear Health Services ব্যবহার করুন।

অন্য অ্যাপ্লিকেশন ডেটা সংগ্রহ করলে, আপনি WorkManager-এর সাথে Health Connect ব্যবহার করে নির্দিষ্ট সময় অন্তর ডেটা ফিরিয়ে আনতে পারবেন।

স্টেপের ডেল্টা বা অতিক্রান্ত দূরত্ব ট্র্যাক করার মতো পরিস্থিতিতে, আপনি মোবাইলে রেকর্ডিং API-এর সাথে WorkManager ব্যবহার করে নির্দিষ্ট সময় অন্তর ডেটা সংগ্রহ করতে পারেন। স্টেপ সংক্রান্ত পুরনো ডেটা অ্যাক্সেস করতে (যেমন, প্রতিদিনের মোট স্টেপ বা গত ৬ ঘণ্টার স্টেপ), Health Connect Android 14 বা তার পরবর্তী ভার্সনে রান করা ডিভাইসের জন্য অন-ডিভাইস স্টেপ ট্র্যাকিং ফিচারও সাপোর্ট করে।

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

সাজেশন

উচ্চ স্যাম্পলিং রেটে রেকর্ড করার জন্য সেন্সর ব্যবহার করলে ব্যাটারি উল্লেখযোগ্যভাবে শেষ হয়ে যেতে পারে, ব্যাটারি শেষ হওয়া এবং ওয়েক লক ব্যবহার কমানোর জন্য এখানে সাজেশন দেওয়া হল:

  • স্টেপ কাউন্ট বা অতিক্রান্ত দূরত্ব ট্র্যাক করলে, ব্যাটারি-সাশ্রয়ী উপায়ে ডেটা রেকর্ড করতে Recording API ব্যবহার করুন। Android 14 বা তার পরবর্তী ভার্সনে চলা ডিভাইসের ক্ষেত্রে, ডিভাইসের পুরনো ডেটা ও মোট স্টেপ কাউন্ট অ্যাক্সেস করতে Health Connect ব্যবহার করার কথা বিবেচনা করুন।
  • Wear OS-এ প্যাসিভ সেন্সর ট্র্যাকিংয়ের জন্য, ব্যাটারির ব্যবহার অপ্টিমাইজ করতে Wear স্বাস্থ্য পরিষেবা ব্যবহার করুন।
  • SensorManager-এর সাথে সেন্সর রেজিস্টার করার সময়, সেন্সর ব্যাচিং লজিক ব্যবহার করতে এবং অ্যাপ্লিকেশনের পাওয়া ইন্টারাপ্টের সংখ্যা কমাতে, ৩০ সেকেন্ডের বেশি সময়ের একটি maxReportLatencyUs সংজ্ঞায়িত করুন। ব্যবহারকারীর ইন্টার‍্যাকশন, লোকেশন রিট্রিভাল বা শিডিউল করা কাজের মতো অন্য কোনও ট্রিগারের মাধ্যমে ডিভাইসটি পরে চালু হলে, সিস্টেমটি অবিলম্বে ক্যাশে করা সেন্সর ডেটা পাঠাবে।
  • আপনার অ্যাপের জন্য লোকেশন ও সেন্সর ডেটা, দুটিরই প্রয়োজন হলে, তাদের ইভেন্ট পুনরুদ্ধার ও প্রসেসিং সিঙ্ক করুন। লোকেশন আপডেটের জন্য সিস্টেম যে সংক্ষিপ্ত ওয়েক লক ধরে রাখে, তার সাথে সেন্সর রিডিং একত্রিত করে, আপনি সিপিইউ চালু রাখার জন্য ওয়েক লক এড়াতে পারেন। এই সম্মিলিত ডেটা আপলোড ও প্রসেস করার জন্য কোনও ওয়ার্কার বা স্বল্প-মেয়াদী ওয়েক লক ব্যবহার করুন।

Firebase Cloud Message (FCM)

অ্যাপে Firebase Cloud Message (FCM) ব্রডকাস্ট ডেলিভার করার সময় ওয়েক লক অ্যাকোয়ার করা হয়। FCM ব্রডকাস্ট onMessageReceived() পদ্ধতি এক্সিকিউট করা শেষ হলে ওয়েক লক রিলিজ করা হয়।

ওয়েক লকের নাম

ডিভাইসে FCM মেসেজ পাওয়া গেলে, GOOGLE_C2DM নামের সাথে একটি সংক্ষিপ্ত ওয়েক লক হোল্ড করা হয়, Android 16+ ভার্সনে ওয়েক লকের নাম হল GCM_MESSAGE।

সাজেশন

FCM-এর আচরণ অপ্টিমাইজ করার জন্য আমরা নিম্নলিখিত পদ্ধতিগুলি সাজেস্ট করি:

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

JobScheduler

ব্যাকগ্রাউন্ডে টাস্ক এক্সিকিউট করার সময় JobScheduler জব ওয়েক লক অ্যাকোয়ার করে। যে অ্যাপ ওয়ার্কার তৈরি করেছে, ওয়েক লক সেই অ্যাপের সাথে অ্যাট্রিবিউট করা হয়।

ওয়েক লকের নাম

JobScheduler-এর মাধ্যমে পাওয়া ওয়েক লকের নাম নির্ভর করে Android সিস্টেমের কোন ভার্সনে সেগুলি চলছে এবং কাজের উদ্দেশ্যের উপর।

অ্যাঙ্গেল ব্র্যাকেটের মধ্যে থাকা আইটেমগুলি হল ভেরিয়েবল। যেমন, "<package_name>" হল আপনার অ্যাপের প্যাকেজের নাম, <package name> টেক্সট নয়। তবে, *job* হল অক্ষর ক্রম *job*, অ্যাস্টেরিস্ক সহ; অ্যাস্টেরিস্কগুলি ওয়াইল্ড কার্ড হিসাবে ব্যবহার করা হচ্ছে না।

Android 15 ও এর আগের যেকোনও ভার্সন

ব্যবহারকারীর শুরু করা কাজ এই প্যাটার্ন অনুসরণ করে নাম সহ ওয়েক লক তৈরি করে:

*job*u/@<name_space>@/<package_name>/<classname>

অন্যান্য চাকরি এই প্যাটার্ন ব্যবহার করে:

*job*/@<name_space>@/<package_name>/<classname>
Android 16 QPR2 ও তার পরবর্তী যেকোনও ভার্সন

ব্যবহারকারীর শুরু করা কাজ এই প্যাটার্ন অনুযায়ী নাম সহ ওয়েক লক তৈরি করে:

*job*u/@<name_space>@/#<trace_tag>#/<package_name>/<classname>

জরুরি ভিত্তিক কাজ এই প্যাটার্ন ব্যবহার করে:

*job*e/@<name_space>@/#<trace_tag>#/<package_name>/<classname>

নিয়মিত কাজ এই প্যাটার্ন ব্যবহার করে:

*job*r/@<name_space>@/#<trace_tag>#/<package_name>/<classname>
উদাহরণ

ধরুন, backup নেমস্পেস ও started ট্রেস ট্যাগ সহ একটি জরুরি ভিত্তিক কাজ আছে। প্যাকেজের নাম হল com.example.app এবং যে ক্লাস জব তৈরি করেছে সেটি হল com.backup.BackupFileService।

Android 15 বা তার আগের যেকোনও ভার্সনে চলা ডিভাইসে, ওয়েক লকের নাম হবে:

*job*/@backup@/com.example.app/com.backup.BackupFileService

Android 16 QPR2 বা তার পরবর্তী যেকোনও ভার্সনে চলা ডিভাইসে, ওয়েক লকের নাম হবে:

*job*e/@backup@/#started#/com.example.app/com.backup.BackupFileService

সাজেশন

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

লোকেশন

LocationManager এবং FusedLocationProviderClient ডিভাইসের লোকেশন পেতে ও ডেলিভার করতে ওয়েক লক ব্যবহার করে। যে অ্যাপ এইসব API কল করেছে, ওয়েক লক সেই অ্যাপের সাথে অ্যাট্রিবিউট করা হয়।

ওয়েক লকের নাম

লোকেশন পরিষেবা নিম্নলিখিত নামগুলি ব্যবহার করে:

  • CollectionLib-SigCollector
  • NetworkLocationLocator
  • NetworkLocationScanner
  • NlpCollectorWakeLock
  • NlpWakeLock
  • *location*

সাজেশন

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

রিমোট মেসেজিং

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

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

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

সাজেশন

  • সার্ভার সাইডে নেটওয়ার্ক ইভেন্ট প্রসেস করা গেলে, ক্লায়েন্টে তথ্য পাওয়ার জন্য FCM ব্যবহার করুন। FCM ডেটার অতিরিক্ত প্রসেসিংয়ের প্রয়োজন হলে, আপনি এক্সপেডিটেড ওয়ার্কার শিডিউল করার বিকল্প বেছে নিতে পারেন।
  • সকেট কানেকশন ব্যবহার করে ক্লায়েন্ট সাইডে ইভেন্ট প্রসেস করতে হলে, ইভেন্ট ইন্টারাপ্ট শোনার জন্য ওয়েক লকের প্রয়োজন নেই। ওয়াই-ফাই বা সেলুলার রেডিওতে ডেটা প্যাকেট পৌঁছালে, রেডিও হার্ডওয়্যার কার্নেল ওয়েক লকের মাধ্যমে একটি ইন্টারাপ্ট ট্রিগার করে। তারপর আপনি ডেটা প্রসেস করার জন্য কোনও ওয়ার্কার শিডিউল করতে বা ওয়েক লক অ্যাকোয়ার করতে পারেন।
  • যেমন, আপনি যদি নেটওয়ার্ক সকেটে ডেটা প্যাকেট শোনার জন্য ktor-network ব্যবহার করেন, তাহলে ক্লায়েন্টের কাছে প্যাকেট ডেলিভার করা হয়ে গেলে তবেই ওয়েক লক অ্যাকোয়ার করা উচিত।

WorkManager

ব্যাকগ্রাউন্ডে টাস্ক এক্সিকিউট করার সময় WorkManager ওয়ার্কার ওয়েক লক অ্যাকোয়ার করে। যে অ্যাপ ওয়ার্কার তৈরি করেছে, ওয়েক লক সেই অ্যাপের সাথে অ্যাট্রিবিউট করা হয়।

ওয়েক লকের নাম

WorkManager-এর মাধ্যমে পাওয়া ওয়েক লকের নাম নির্ভর করে Android সিস্টেমের কোন ভার্সনে সেগুলি চলছে তার উপর।

Android 15 ও এর আগের যেকোনও ভার্সন

WorkManager টাস্ক এই প্যাটার্ন অনুসরণ করে এমন নামের সাথে ওয়েক লক তৈরি করে:

*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
Android 16 QPR2 ও তার পরবর্তী যেকোনও ভার্সন

এক্সপেডাইট করা টাস্ক এই প্যাটার্ন অনুযায়ী নাম সহ ওয়েক লক তৈরি করে:

*job*e/#<trace_tag>#/<package_name>/androidx.work.impl.background.systemjob.SystemJobService

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

*job*r/#<trace_tag>#/<package_name>/androidx.work.impl.background.systemjob.SystemJobService

ডিফল্ট হিসেবে, <trace_tag> হল কর্মীর নাম।

উদাহরণ

ধরুন, BackupFileWorker নামের একজন দ্রুত কাজ করেন এমন কর্মী আছেন। প্যাকেজের নাম হল com.example.app।

Android 15 বা তার আগের যেকোনও ভার্সনে চলা ডিভাইসে, ওয়েক লকের নাম হবে:

*job*/com.example.app/androidx.work.impl.background.systemjob.SystemJobService

Android 16 QPR2 বা তার পরবর্তী যেকোনও ভার্সনে চলা এবং WorkManager 2.10.0+ ব্যবহার করা ডিভাইসে, ওয়েক লকের নাম হবে:

*job*e/#BackupFileWorker#/com.example.app/androidx.work.impl.background.systemjob.SystemJobService

সাজেশন

  • Android 16 QPR2 বা তার পরবর্তী যেকোনও ভার্সনে ওয়েক লক ট্যাগ আরও বিস্তারিত করতে, আপনার WorkManager ভার্সন লেটেস্ট স্টেবল ভার্সনে আপগ্রেড করুন।
  • WorkManager ওয়ার্কারের ব্যবহার অডিট করুন। বিশেষ করে, এটি টাস্ক শিডিউলিং API-এর জন্য ব্যাটারির ব্যবহার অপ্টিমাইজ করা সংক্রান্ত আমাদের নির্দেশিকা অনুসরণ করে কিনা তা যাচাই করুন। Android 16 QPR2 বা এর পরবর্তী যেকোনও ভার্সনে ওয়েক লক ট্যাগ আরও বিস্তারিত করতে, ওয়ার্কারের উপর setTraceTag পদ্ধতি ব্যবহার করুন যাতে আরও ডিবাগ তথ্য যোগ করা যায়, যেমন কোন ক্লাস ওয়ার্কারকে শিডিউল করেছে।
  • আপনি যদি WorkManager-এর মাধ্যমে তৈরি করা ওয়েক লক শনাক্ত করেন, যেখানে ওয়েক লক ব্যবহারের পরিমাণ বেশি, তাহলে এটি হতে পারে কারণ আপনি নির্দিষ্ট পরিস্থিতিতে আপনার ওয়ার্কারকে সম্পূর্ণ না করার জন্য ভুলভাবে কনফিগার করেছেন। ওয়ার্কার বন্ধ হওয়ার কারণ বিশ্লেষণ করার কথা বিবেচনা করুন, বিশেষ করে যদি আপনি STOP_REASON_TIMEOUT-এর উচ্চ ঘটনা দেখতে পান।
  • ওয়ার্কার বন্ধ হওয়ার কারণ লগ করার পাশাপাশি, আপনার ওয়ার্কার ডিবাগ করা সংক্রান্ত আমাদের ডকুমেন্টেশন দেখুন। এছাড়াও, ওয়েক লক কখন অ্যাকোয়ার ও রিলিজ করা হয় তা বুঝতে সিস্টেম ট্রেস সংগ্রহ ও বিশ্লেষণ করার কথা বিবেচনা করুন।

_UNKNOWN

ডিবাগিং টুল যদি মনে করে যে ওয়েক লকের নামে ব্যক্তিগতভাবে শনাক্তকরণযোগ্য তথ্য (PII) আছে, তাহলে এটি ওয়েক লকের আসল নাম দেখায় না। পরিবর্তে, তারা ওয়েক লককে _UNKNOWN হিসেবে লেবেল করে। যেমন, ওয়েক লকের নামে ইমেল আইডি থাকলে, টুল এটি করতে পারে।

সাজেশন

ওয়েক লক নামকরণের পেশাদার পদ্ধতি অনুসরণ করুন এবং ওয়েক লকের নামে PII ব্যবহার করা এড়িয়ে চলুন। আপনার অ্যাপে _UNKNOWN নামের ওয়েক লক থাকলে, সেটি শনাক্ত করে অন্য নাম দিন।