ওয়েক লক ব্যবহার করলে ডিভাইসের পারফর্ম্যান্স খারাপ হতে পারে। আপনাকে ওয়েক লক ব্যবহার করতে হলে, এটি সঠিকভাবে করা গুরুত্বপূর্ণ। এই ডকুমেন্টে কিছু পেশাদার পদ্ধতি সম্পর্কে আলোচনা করা হয়েছে যা আপনাকে ওয়েক লক সংক্রান্ত সাধারণ সমস্যা এড়াতে সাহায্য করবে।
ওয়েক লকের সঠিক নাম দিন
আমরা সাজেস্ট করি যে আপনি wakelock ট্যাগে আপনার প্যাকেজ, ক্লাস বা পদ্ধতির নাম অন্তর্ভুক্ত করুন। এর ফলে, কোনও সমস্যা হলে, আপনার সোর্স কোডের কোন লোকেশনে ওয়েক লক তৈরি করা হয়েছে তা খুঁজে পাওয়া সহজ হয়। এখানে কিছু অতিরিক্ত পরামর্শ দেওয়া হল:
- নামে ব্যক্তিগতভাবে শনাক্তকরণ তথ্য (PII) বাদ দিন,
যেমন ইমেল আইডি। ডিভাইস যদি ওয়েক লক
ট্যাগে PII শনাক্ত করে, তাহলে আপনার উল্লেখ করা ট্যাগের পরিবর্তে এটি
_UNKNOWNলগ করে। - প্রোগ্রাম্যাটিক্যালি ক্লাস বা মেথডের নাম পাবেন না, যেমন
getName()কল করে। আপনি যদি প্রোগ্রাম্যাটিক্যালি নাম পাওয়ার চেষ্টা করেন, তাহলে Proguard-এর মতো টুল দ্বারা এটি অস্পষ্ট হয়ে যেতে পারে। পরিবর্তে হার্ড-কোডেড স্ট্রিং ব্যবহার করুন। - ওয়েক লক ট্যাগে কাউন্টার বা অনন্য শনাক্তকারী যোগ করবেন না। যে কোড ওয়েক লক তৈরি করে, সেটি প্রতিবার রান করার সময় একই ট্যাগ ব্যবহার করা উচিত। এই প্র্যাক্টিস সিস্টেমকে প্রতিটি পদ্ধতির ওয়েক লক ব্যবহার একত্রিত করতে সক্ষম করে।
আপনার অ্যাপটি ফোরগ্রাউন্ডে দেখা যাচ্ছে কিনা তা নিশ্চিত করুন
ওয়েক লক চালু থাকাকালীন, ডিভাইস পাওয়ার ব্যবহার করে। ডিভাইসের ব্যবহারকারীকে জানতে হবে যে এটি চলছে। এই কারণে, আপনি ওয়েক লক ব্যবহার করলে, ব্যবহারকারীকে কিছু বিজ্ঞপ্তি দেখানো উচিত। বাস্তবে, এর অর্থ হল আপনাকে ফোরগ্রাউন্ড সার্ভিস-এ ওয়েক লক পেতে ও ধরে রাখতে হবে। বিজ্ঞপ্তি দেখানোর জন্য ফোরগ্রাউন্ড সার্ভিস প্রয়োজন।
আপনার অ্যাপের জন্য ফোরগ্রাউন্ড সার্ভিস সঠিক বিকল্প না হলে, সম্ভবত আপনার ওয়েক লকও ব্যবহার করা উচিত নয়। আপনার অ্যাপ ফোরগ্রাউন্ডে না থাকলে কাজ করার অন্যান্য উপায়ের জন্য ডিভাইস চালু রাখার জন্য সঠিক API বেছে নিন ডকুমেন্টেশন দেখুন।
লজিক সহজ রাখুন
ওয়েক লক পাওয়া ও রিলিজ করার লজিক যতটা সম্ভব সহজ রাখুন। আপনার ওয়েক লক লজিক জটিল স্টেট মেশিন, টাইম-আউট, এক্সিকিউটর পুল বা কলব্যাক ইভেন্টের সাথে যুক্ত থাকলে, সেই লজিকে কোনও সূক্ষ্ম বাগ থাকলে, ওয়েক লক প্রত্যাশার চেয়ে বেশি সময় ধরে রাখা হতে পারে। এইসব বাগ ডায়াগনসিস ও ডিবাগ করা কঠিন।
ওয়েক লক সবসময় রিলিজ করা আছে কিনা তা চেক করুন
আপনি ওয়েক লক ব্যবহার করলে, আপনার অ্যাকোয়ার করা প্রতিটি ওয়েক লক যাতে সঠিকভাবে রিলিজ হয় তা নিশ্চিত করতে হবে। এটি সবসময় ততটা সহজ হয় না যতটা মনে হয়। যেমন, নিম্নলিখিত কোডে সমস্যা আছে:
Kotlin
@Throws(MyException::class)
fun doSomethingAndRelease() {
wakeLock.apply {
acquire()
doTheWork() // can potentially throw MyException
release() // does not run if an exception is thrown
}
}
জাভা
void doSomethingAndRelease() throws MyException {
wakeLock.acquire();
doTheWork(); // can potentially throw MyException
wakeLock.release(); // does not run if an exception is thrown
}
এখানে সমস্যা হল যে পদ্ধতি doTheWork() ব্যতিক্রম তুলে ধরতে পারে
MyException. যদি তা হয়, তাহলে doSomethingAndRelease() পদ্ধতি ব্যতিক্রমকে
বাইরে ছড়িয়ে দেয় এবং এটি কখনও release() কলে পৌঁছায় না। এর ফলে
ওয়েক লক অ্যাকোয়ার করা হলেও রিলিজ করা হয় না, যা খুবই খারাপ।
সংশোধিত কোডে, doSomethingAndRelease() নিশ্চিত করে যে ব্যতিক্রম ঘটলেও
ওয়েক লক রিলিজ করা হবে:
Kotlin
@Throws(MyException::class)
fun doSomethingAndRelease() {
wakeLock.apply {
try {
acquire()
doTheWork()
} finally {
release()
}
}
}
জাভা
void doSomethingAndRelease() throws MyException {
try {
wakeLock.acquire();
doTheWork();
} finally {
wakeLock.release();
}
}