অন্যান্য API দ্বারা তৈরি ওয়েক লকগুলি সনাক্ত করুন৷

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

যেসব পরিস্থিতিতে অন্য API গুলি ওয়েক লক অধিগ্রহণ করে, সেখানে আপনার ম্যানুয়াল ওয়েক লক অধিগ্রহণ এড়ানো উচিত।

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

এই ডকুমেন্টটি সেই পরিস্থিতিগুলি কভার করে যেখানে ওয়েক লক তৈরি করা যেতে পারে। প্রতিটি ক্ষেত্রে, যদিও ওয়েক লকটি অন্য কোনও লাইব্রেরি বা API দ্বারা তৈরি করা হতে পারে, লকটি সেই অ্যাপের সাথে সম্পর্কিত যাকে সেই API বলা হয়।

অ্যালার্ম ম্যানেজার

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

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

AlarmManager *alarm* নামক ওয়েক লক তৈরি করে। (তারকাচিহ্নগুলি ওয়েক লকের নামের অংশ, এগুলি ওয়াইল্ড কার্ডের প্রতিনিধিত্ব করে না।)

সুপারিশ

অ্যালার্ম আচরণকে সর্বোত্তম করার জন্য আমরা নিম্নলিখিত অনুশীলনগুলি সুপারিশ করি:

  • অ্যালার্ম শিডিউলিং ফ্রিকোয়েন্সি অপ্টিমাইজ করতে AlarmManager ব্যবহার করুন।
  • প্রয়োজনে শুধুমাত্র RTC_WAKEUP ধরণের অ্যালার্ম (যা ডিভাইসটি জাগিয়ে তোলে) ব্যবহার করুন।
  • অ্যালার্মের ব্যবহার কম করুন এবং onReceive() পদ্ধতিতে দীর্ঘ কাজ করা এড়িয়ে চলুন।

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

অডিও রেকর্ডিং বা প্লে করার সময় মিডিয়া API গুলি ওয়েক লক অর্জন করতে পারে। ওয়েক লকগুলি কলিং অ্যাপের জন্য দায়ী করা হয়।

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

মিডিয়া এপিআইগুলি Audio দিয়ে শুরু হওয়া বিভিন্ন নামের ওয়েক লক অর্জন করে:

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

সুপারিশ

আমরা নিম্নলিখিত অনুশীলনগুলি সুপারিশ করি:

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

ব্লুটুথ

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

সুপারিশ

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

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

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

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

ধাপের ডেল্টা বা ভ্রমণ করা দূরত্ব ট্র্যাক করার মতো পরিস্থিতিতে, আপনি ডেটা পুনরুদ্ধার করতে WorkManager এর সাথে মিলিত মোবাইলে রেকর্ডিং API ব্যবহার করতে পারেন।

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

সুপারিশ

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

  • যদি ধাপের সংখ্যা বা ভ্রমণের দূরত্ব ট্র্যাক করা হয়, তাহলে ব্যাটারি-সাশ্রয়ী পদ্ধতিতে ডেটা রেকর্ড করতে রেকর্ডিং API ব্যবহার করুন।
  • Wear OS-এ প্যাসিভ সেন্সর ট্র্যাকিংয়ের জন্য, ব্যাটারি ব্যবহার অপ্টিমাইজ করতে Wear Health Services ব্যবহার করুন।
  • আপনার সেন্সরের ফ্রিকোয়েন্সি ২০০ হার্জের কম করুন।
  • SensorManager এ একটি সেন্সর নিবন্ধন করার সময়, সেন্সর ব্যাচিং লজিক ব্যবহার করতে এবং অ্যাপ্লিকেশনটি যে পরিমাণ ইন্টারাপ্ট গ্রহণ করে তা কমাতে 30 সেকেন্ডের বেশি সময়সীমার maxReportLatencyUs নির্ধারণ করুন।
  • সেন্সর ট্র্যাকিংয়ের পুরো সময়কালের জন্য দীর্ঘ ওয়েক লক ধরে রাখা এড়িয়ে চলুন, পরিবর্তে প্রতি 30+ সেকেন্ডে সেন্সর ডেটার জন্য পোল করার জন্য AlarmManager ব্যবহার করে অ্যালার্ম নির্ধারণ করুন।

ফায়ারবেস ক্লাউড মেসেজ (FCM)

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

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

GOOGLE_C2DM নামে একটি ওয়েক লক অর্জিত হয়।

সুপারিশ

FCM আচরণ অপ্টিমাইজ করার জন্য আমরা নিম্নলিখিত অনুশীলনগুলি সুপারিশ করি:

  • FCM ডেলিভারির ফ্রিকোয়েন্সি অপ্টিমাইজ করুন।
  • বার্তাটি তাৎক্ষণিকভাবে পৌঁছে দেওয়ার প্রয়োজন না হলে উচ্চ-অগ্রাধিকার FCM ব্যবহার করবেন না।
  • onMessageReceived() পদ্ধতিটি যত তাড়াতাড়ি সম্ভব সম্পন্ন করুন। আরও তথ্যের জন্য firebase নির্দেশিকা দেখুন।

জবশিডিউলার

জবশিডিউলার জবগুলি ব্যাকগ্রাউন্ডে কাজ সম্পাদন করার সময় ওয়েক লক অর্জন করে। ওয়েক লকগুলি সেই অ্যাপের জন্য দায়ী করা হয় যা কর্মীদের তৈরি করেছিল।

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

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

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

অ্যান্ড্রয়েড ১৫ এবং তার আগের ভার্সন

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

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

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

*job*/@<name_space>@/<package_name>/<classname>
অ্যান্ড্রয়েড ১৬ এবং উচ্চতর

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

*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>
উদাহরণ

ধরুন namespace backup এবং trace tag দিয়ে একটি expedited কাজ started । প্যাকেজটির নাম হল com.example.app , এবং যে ক্লাসটি কাজটি তৈরি করেছে তা হল com.backup.BackupFileService

অ্যান্ড্রয়েড ১৫ বা তার নিচের ভার্সনে চলমান ডিভাইসগুলিতে, ওয়েক লকের নাম হবে:

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

অ্যান্ড্রয়েড ১৬ বা তার পরবর্তী ভার্সন চালিত ডিভাইসগুলিতে, ওয়েক লকের নাম হবে:

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

সুপারিশ

JobScheduler টাস্কের ব্যবহার নিরীক্ষণ করুন। বিশেষ করে, টাস্ক শিডিউলিং API-এর জন্য ব্যাটারি ব্যবহার অপ্টিমাইজ করার জন্য আমাদের নির্দেশিকা অনুসরণ করুন।

স্থান

LocationManager এবং FusedLocationProviderClient ডিভাইসের অবস্থান অর্জন এবং সরবরাহ করার জন্য ওয়েক লক ব্যবহার করে। ওয়েক লকগুলি সেই অ্যাপের সাথে সম্পর্কিত যা এই API গুলিকে কল করেছিল।

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

অবস্থান পরিষেবাগুলি নিম্নলিখিত নামগুলি ব্যবহার করে:

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

সুপারিশ

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

ওয়ার্ক ম্যানেজার

ওয়ার্কম্যানেজার কর্মীরা ব্যাকগ্রাউন্ডে কাজ সম্পাদন করার সময় ওয়েক লক অর্জন করে। ওয়েক লকগুলি সেই অ্যাপের জন্য দায়ী করা হয় যা কর্মীদের তৈরি করেছিল।

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

ওয়ার্কম্যানেজার কর্তৃক অর্জিত ওয়েক লকের নামগুলি অ্যান্ড্রয়েড সিস্টেমের কোন সংস্করণে চলছে তার উপর নির্ভর করে।

অ্যান্ড্রয়েড ১৫ এবং তার আগের ভার্সন

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

*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
অ্যান্ড্রয়েড ১৬ এবং উচ্চতর

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

*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

অ্যান্ড্রয়েড ১৫ বা তার নিচের ভার্সনে চলমান ডিভাইসগুলিতে, ওয়েক লকের নাম হবে:

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

অ্যান্ড্রয়েড ১৬ বা তার বেশি ভার্সন চালিত এবং WorkManager 2.10.0+ ব্যবহারকারী ডিভাইসগুলিতে, ওয়েক লকের নামকরণ করা হবে:

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

সুপারিশ

_অজানা

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

সুপারিশ

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