Je mets des alarmes dans mon application en utilisant AlarmManager
à partir de plusieurs Activités.
Pour éviter le code redondant, j'ai créé la classe suivante :
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;
}
}
Donc quand je veux définir une alarme, je peux simplement appeler ce qui suit de n'importe où dans mon application :
CustomAlarmManager.setNewAlarm(unContexte, someTimeInMillis);
Ma question :
Devrais-je m'inquiéter de la fuite du Context
ici ?
Je ne conserve pas de référence à celui-ci, donc je pense que c'est bon, mais je ne suis pas sûr.
Est-ce une bonne approche ?