Tôi đang đặt báo thức trong ứng dụng của mình bằng cách sử dụng AlarmManager
từ nhiều Hoạt động.Tôi có bị rò rỉ Bối cảnh không?
Để tránh mã dư thừa, tôi tạo ra lớp sau:
public class CustomAlarmManager {
private static final String SHARED_PREF_REQUEST_CODE = "requestCode";
private static final String KEY_REQUEST_CODE = "kRequestCode";
private CustomAlarmManager() {
}
public static void setNewAlarm(Context context, long timeInMillis) {
Intent intent = new Intent(SomeOtherClass.ALARM_ACTION);
intent.putExtra(SomeOtherClass.KEY_ALARM_TIME, timeInMillis);
PendingIntent pendingIntent = PendingIntent.getBroadcast(
context.getApplicationContext(),
getNewCode(context),
intent,
PendingIntent.FLAG_ONE_SHOT);
AlarmManager am = (AlarmManager) context.getSystemService(ALARM_SERVICE);
if (Build.VERSION.SDK_INT >= 23) {
am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,
timeInMillis, pendingIntent);
} else if (Build.VERSION.SDK_INT >= 19) {
am.setExact(AlarmManager.RTC_WAKEUP, timeInMillis, pendingIntent);
} else {
am.set(AlarmManager.RTC_WAKEUP, timeInMillis, pendingIntent);
}
}
// this method is for generating unique int values
// for the requestCode param of PendingIntent.getBroadcast()
private static int getNewCode(Context context) {
SharedPreferences prefs = context.getSharedPreferences(
SHARED_PREF_REQUEST_CODE, MODE_PRIVATE);
int oldCode = prefs.getInt(KEY_REQUEST_CODE, Integer.MIN_VALUE);
int newCode = ++oldCode;
prefs.edit().putInt(KEY_REQUEST_CODE, newCode).apply();
return newCode;
}
}
Vì vậy, khi tôi muốn thiết lập một báo thức, tôi chỉ có thể gọi sau đây từ bất cứ nơi nào trong ứng dụng của tôi:
CustomAlarmManager.setNewAlarm(aContext, someTimeInMillis);
Câu hỏi của tôi:
Tôi có phải lo lắng về việc rò rỉ Context
tại đây không?
Tôi không lưu trữ một tham chiếu đến nó, vì vậy tôi nghĩ rằng tôi là tốt, nhưng tôi không chắc chắn.
Đây có phải là cách tiếp cận tốt không?
Bạn thậm chí còn sử dụng ứng dụngĐối với trường hợp vừa đủ;) tuyệt vời;) được thực hiện tốt. –