Tôi đã tạo một ứng dụng sử dụng camera và trong quá trình thực hiện ứng dụng, màn hình luôn bật.Android: Cách giải phóng tài nguyên khi ứng dụng chấm dứt?
Trong phương thức onCreate() tôi đã thêm khóa:
final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
this.mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
this.mWakeLock.acquire();
Và đây là overriden onStop() phương pháp:
@Override
protected void onStop() {
if(mWakeLock.isHeld())
{
mWakeLock.release();
}
super.onStop();
}
Nhưng sau khi kết thúc ứng dụng màn hình vẫn còn trên tất cả các thời gian và nếu tôi chạy ứng dụng máy ảnh, nó gặp lỗi xuất hiện rõ ràng vì tài nguyên máy ảnh không được phát hành.
Có ai biết cách giải phóng tất cả các tài nguyên khi chấm dứt ứng dụng không?
gợi ý của bạn cho không kiểm tra trạng thái khóa là ok nếu phát hành() là một hoạt động idempotent. Nếu không, nó xấu. Điều gì sẽ xảy ra nếu ứng dụng không nhận được khóa và muốn đóng ứng dụng? – Thushan
Nhận xét tuyệt vời. Tôi đã xem mã nguồn Android. Có vẻ như cách duy nhất bạn không thể lấy khóa là nếu bạn làm sai cuộc gọi của mình, trong trường hợp đó, nhật ký sẽ báo lỗi nhưng không ném ngoại lệ. Nếu bạn gọi bản phát hành() mà không có khóa, nó sẽ ném một ngoại lệ "WakeLock bị khóa". Tài liệu về việc có được() dẫn người ta nghĩ nếu bạn yêu cầu khóa, bạn sẽ nhận được khóa. Nhưng nếu bạn nên kiểm tra, sau đó bạn nên kiểm tra ngay sau khi có được(), không phải sau khi chương trình đã chạy và bạn sắp thoát. – Will