ওয়েক লক ব্যবহার করলে ডিভাইসের কর্মক্ষমতা ক্ষতিগ্রস্ত হতে পারে। যদি আপনার ওয়েক লক ব্যবহার করার প্রয়োজন হয়, তাহলে এটি সঠিকভাবে করা গুরুত্বপূর্ণ। এই ডকুমেন্টে কিছু সেরা অনুশীলনের কথা বলা হয়েছে যা আপনাকে সাধারণ ওয়েক লক সমস্যা এড়াতে সাহায্য করতে পারে।
ওয়েক লকের নাম ঠিকভাবে দাও।
আমরা আপনার প্যাকেজ, ক্লাস, অথবা পদ্ধতির নাম ওয়েকলক ট্যাগে অন্তর্ভুক্ত করার পরামর্শ দিচ্ছি। এইভাবে, যদি কোনও ত্রুটি দেখা দেয়, তাহলে আপনার সোর্স কোডে সেই অবস্থানটি খুঁজে পাওয়া সহজ হবে যেখানে ওয়েকলকটি তৈরি করা হয়েছিল। এখানে কিছু অতিরিক্ত টিপস দেওয়া হল:
- নামের মধ্যে ব্যক্তিগতভাবে শনাক্তকারী তথ্য (PII) বাদ দিন, যেমন একটি ইমেল ঠিকানা। যদি ডিভাইসটি ওয়েক লক ট্যাগে PII সনাক্ত করে, তাহলে এটি আপনার নির্দিষ্ট করা ট্যাগের পরিবর্তে
_UNKNOWNলগ করে। - ক্লাস বা মেথডের নাম প্রোগ্রাম্যাটিকভাবে নেবেন না, উদাহরণস্বরূপ
getName()কল করে। যদি আপনি প্রোগ্রাম্যাটিকভাবে নামটি পেতে চেষ্টা করেন, তাহলে Proguard এর মতো টুল দ্বারা এটি অস্পষ্ট হয়ে যেতে পারে। পরিবর্তে একটি হার্ড-কোডেড স্ট্রিং ব্যবহার করুন। - ওয়েক লক ট্যাগগুলিতে কোনও কাউন্টার বা অনন্য শনাক্তকারী যোগ করবেন না। যে কোডটি ওয়েক লক তৈরি করে তা প্রতিবার চালানোর সময় একই ট্যাগ ব্যবহার করা উচিত। এই অনুশীলনটি সিস্টেমকে প্রতিটি পদ্ধতির ওয়েক লকের ব্যবহার একত্রিত করতে সক্ষম করে।
নিশ্চিত করুন যে আপনার অ্যাপটি ফোরগ্রাউন্ডে দৃশ্যমান।
যখন একটি ওয়েক লক সক্রিয় থাকে, তখন ডিভাইসটি বিদ্যুৎ ব্যবহার করে। ডিভাইসের ব্যবহারকারীর সচেতন থাকা উচিত যে এটি চলছে। এই কারণে, যদি আপনি একটি ওয়েক লক ব্যবহার করেন, তাহলে আপনার ব্যবহারকারীকে কিছু বিজ্ঞপ্তি প্রদর্শন করা উচিত। বাস্তবে, এর অর্থ হল আপনার একটি ফোরগ্রাউন্ড পরিষেবাতে ওয়েক লকটি ধরে রাখা উচিত। একটি বিজ্ঞপ্তি প্রদর্শনের জন্য ফোরগ্রাউন্ড পরিষেবাগুলির প্রয়োজন।
যদি আপনার অ্যাপের জন্য কোনও ফোরগ্রাউন্ড পরিষেবা সঠিক পছন্দ না হয়, তাহলে সম্ভবত আপনার ওয়েক লক ব্যবহার করা উচিত নয়। আপনার অ্যাপটি ফোরগ্রাউন্ডে না থাকাকালীন কাজ করার অন্যান্য উপায়গুলির জন্য "ডিভাইস জাগ্রত রাখার জন্য সঠিক API নির্বাচন করুন" ডকুমেন্টেশনটি দেখুন।
যুক্তি সহজ রাখুন
ওয়েক লক অর্জন এবং রিলিজ করার জন্য যুক্তি যতটা সম্ভব সহজ তা নিশ্চিত করুন। যখন আপনার ওয়েক লক লজিক জটিল স্টেট মেশিন, টাইমআউট, এক্সিকিউটার পুল বা কলব্যাক ইভেন্টের সাথে সংযুক্ত থাকে, তখন সেই লজিকের যেকোনো সূক্ষ্ম বাগ ওয়েক লকটিকে প্রত্যাশার চেয়ে বেশি সময় ধরে ধরে রাখতে পারে। এই বাগগুলি নির্ণয় এবং ডিবাগ করা কঠিন।
ওয়েক লকটি সর্বদা প্রকাশিত হয় কিনা তা পরীক্ষা করুন।
যদি আপনি একটি ওয়েক লক ব্যবহার করেন, তাহলে আপনাকে নিশ্চিত করতে হবে যে আপনার কেনা প্রতিটি ওয়েক লক সঠিকভাবে রিলিজ হয়েছে। এটি সবসময় যতটা সহজ মনে হয় ততটা সহজ নয়। উদাহরণস্বরূপ, নিম্নলিখিত কোডটিতে একটি সমস্যা রয়েছে:
কোটলিন
@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() নিশ্চিত করে যে কোনও ব্যতিক্রম থ্রো করা হলেও ওয়েক লকটি ছেড়ে দেওয়া হচ্ছে:
কোটলিন
@Throws(MyException::class)
fun doSomethingAndRelease() {
wakeLock.apply {
try {
acquire()
doTheWork()
} finally {
release()
}
}
}
জাভা
void doSomethingAndRelease() throws MyException {
try {
wakeLock.acquire();
doTheWork();
} finally {
wakeLock.release();
}
}