ওয়েক লক সর্বোত্তম অনুশীলন অনুসরণ করুন

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

ওয়েক লকটির সঠিক নাম দিন

আমরা ওয়েকলক ট্যাগে আপনার প্যাকেজ, ক্লাস বা পদ্ধতির নাম অন্তর্ভুক্ত করার পরামর্শ দিই। এইভাবে, যদি কোনও ত্রুটি ঘটে, তাহলে আপনার সোর্স কোডে যেখানে ওয়েক লক তৈরি করা হয়েছিল সেই অবস্থানটি খুঁজে পাওয়া সহজ। এখানে কিছু অতিরিক্ত টিপস আছে:

  • নামে কোনো ব্যক্তিগতভাবে শনাক্তকরণ তথ্য (PII) ছেড়ে দিন, যেমন একটি ইমেল ঠিকানা। ডিভাইসটি ওয়েক লক ট্যাগে PII শনাক্ত করলে, এটি আপনার নির্দিষ্ট ট্যাগের পরিবর্তে _UNKNOWN লগ করে।
  • ক্লাস বা পদ্ধতির নাম প্রোগ্রাম্যাটিকভাবে পাবেন না, উদাহরণস্বরূপ getName() কল করে। আপনি যদি প্রোগ্রামগতভাবে নামটি পাওয়ার চেষ্টা করেন তবে এটি প্রোগার্ডের মতো সরঞ্জামগুলির দ্বারা অস্পষ্ট হয়ে যেতে পারে। পরিবর্তে একটি হার্ড কোডেড স্ট্রিং ব্যবহার করুন.
  • লক ট্যাগ জাগানোর জন্য একটি কাউন্টার বা অনন্য শনাক্তকারী যোগ করবেন না। যে কোডটি একটি ওয়েক লক তৈরি করে তা প্রতিবার চালানোর সময় একই ট্যাগ ব্যবহার করা উচিত। এই অনুশীলনটি সিস্টেমকে প্রতিটি পদ্ধতির ওয়েক লক ব্যবহারকে একত্রিত করতে সক্ষম করে।

আপনার অ্যাপটি ফোরগ্রাউন্ডে দৃশ্যমান কিনা তা নিশ্চিত করুন

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

যদি একটি অগ্রভাগের পরিষেবা আপনার অ্যাপের জন্য সঠিক পছন্দ না হয় তবে আপনার সম্ভবত একটি ওয়েক লক ব্যবহার করা উচিত নয়। আপনার অ্যাপ ফোরগ্রাউন্ডে না থাকাকালীন কাজ করার অন্যান্য উপায়ের জন্য ডিভাইসটিকে জাগ্রত ডকুমেন্টেশন রাখতে সঠিক 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();
    }
}