jus*_*oob 5 android android-context android-alarms
我正在使用AlarmManager多个活动在我的应用中设置闹钟.
为了避免冗余代码,我创建了以下类:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,当我想设置闹钟时,我可以从我的应用中的任何位置调用以下内容:
CustomAlarmManager.setNewAlarm(aContext, someTimeInMillis);
Run Code Online (Sandbox Code Playgroud)
我的问题:
我应该担心泄漏Context吗?
我没有存储它的引用,所以我觉得我很好,但我不确定.
这是一个好方法吗?
我认为没有任何问题。
当您需要将来完成某些任务并且您持有对当前可用对象的引用(该对象可能会在该任务发生之前被杀死)时,通常会发生泄漏问题。
如果将非静态内部类对象作为参数发送以在将来的特定时间使用,也会发生这种情况。由于非静态内部类持有对其父类的引用,因此会造成很大的内存泄漏。
1-你没有为你未来的任务提供任何参考资料
2-您没有使用内部类并将您的类作为单独的文件并且方法是静态的。
所以请确保您安全无恙;)
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |