آزاد کردن قفل بیداری

این صفحه نحوه آزاد کردن قفل بیداری نگه‌داشته‌شده توسط برنامه‌تان را شرح می‌دهد. مهم است که قفل بیداری را به‌محض اینکه برنامه‌تان استفاده از آن را تمام کرد آزاد کنید تا از خالی شدن باتری جلوگیری شود.

رها کردن قفل بیداری فعال

برای آزاد کردن قفل بیداری فعال، روش release() آن را فراخوانی کنید. انجام این کار ادعای شما را برای CPU آزاد می‌کند.

برای مثال، کد زیر قفل بیداری را به‌دست می‌آورد، کمی کار انجام می‌دهد، سپس قفل بیداری را آزاد می‌کند:

کاتلین

@Throws(MyException::class)
fun doSomethingAndRelease() {
    wakeLock.apply {
        try {
            acquire(WAKELOCK_TIMEOUT)
            doTheWork()
        } finally {
            release()
        }
    }
}

جاوا

void doSomethingAndRelease() throws MyException {
    try {
        wakeLock.acquire(WAKELOCK_TIMEOUT);
        doTheWork();
    } finally {
        wakeLock.release();
    }
}

به‌محض اینکه قفل‌های بیداری دیگر لازم نبودند، حتماً آن‌ها را واگذار کنید. برای مثال، اگر از قفل بیداری برای اجازه دادن به تکمیل تکلیف پس‌زمینه‌ای استفاده می‌کنید، به‌محض اینکه تکلیف تکمیل شد، حتماً قفل را آزاد کنید.

نکات کلیدی درباره این کد

  • در این مثال، روش doTheWork() ممکن است با استثنا روبرو شود. به همین دلیل، کد قفل بیداری را در بلوک finally آزاد می‌کند تا مطمئن شود قفل بیداری صرف‌نظر از اینکه استثنایی ایجاد شده است یا نه، آزاد می‌شود. بسیار مهم است که مطمئن شوید هر قفل بیداری که تنظیم می‌کنید آزاد شود، بنابراین باید همه مسیرهای کد ممکن را بررسی کنید تا مطمئن شوید قفل بیداری در هیچ‌کدام از آن‌ها فعال باقی نمانده باشد.

  • بهتر است قفل بیداری را با WakeLock.acquire(long timeout) به‌دست آورید، که قفل بیداری را پس‌از دوره زمان اتمام مشخص‌شده به‌طور خودکار آزاد می‌کند. بااین‌حال، وقتی دیگر به قفل بیداری نیاز ندارید، باید آن را به‌طور صریح آزاد کنید تا قفل بیداری را بیشتر از حد لازم نگه ندارید.

همچنین مراجعه کنید به