android - getApplicationContext 或设置 PnedingIntent 时获取 Context
问题描述
设置警报时应该使用哪个上下文与 PendintIntent?ApplicationContext 还是活动上下文?
这还重要吗?(性能和内存方面)设置警报时使用哪一个有什么区别吗?
更多细节:我在某处读到,当您持有对活动上下文的引用时,垃圾收集器永远不会清理该活动。因此,如果我想每天设置 5 个警报,并且每个警报都有自己的上下文,如果我传入活动上下文,这不会导致内存泄漏吗?因为对上下文的引用永远不会被清除,因为警报总是在使用中。使用最低内存的最佳实践(上下文)是什么?
这是我已经创建 PendingIntent 的方式:
public static void setAlarm(Context context, Activity activity){
AlarmManager am =( AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(activity, AlarmReceiver.class);
intent.setAction("android.intent.action.NOTIFY");
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_ONE_SHOT);
Calendar time = getTime();
//set Alarm for different API levels
if (Build.VERSION.SDK_INT >= 23){
am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,time.getTimeInMillis(),pi);
}
else{
am.set(AlarmManager.RTC_WAKEUP,time.getTimeInMillis(),pi);
}
}
解决方案
context
inPendingIntent
用于启动 a 的对象class
。所以我不相信使用任何类型的有区别,context
因为一旦启动class
in ,垃圾收集器就会收集对象。PendingIntent
context
当然,在某些情况下context
会保留以供进一步使用。但是,每个警报都有多个警报context
似乎不会导致内存问题。请注意,通过调用getContext()
我们使用 a context
,并且我们不创建它。这意味着该对象只有一个相当昂贵pointer
的对象。不管你用它做什么,它本身都会有自己的循环,除非你把它保存在一个或一个长期运行的过程中。context
object
object
Field
class
推荐阅读
- julia - 如何在 Julia 中找到数组最小值的值和索引?
- ios - 覆盖 UIMenu 上的用户界面样式(即浅色/深色)
- javascript - 如何处理钩子中的嵌套useState,就像基于反应的组件中的嵌套setState一样?
- python - 如何使用数据框在函数中编写 sklearn.SimpleImputer?
- c - C - 了解客户端/服务器聊天 ioctl-function
- tabulator - 如何获取 Tabulator 表中所有列的宽度?
- python - Open XML 文档保护实现(documentProtection 类)
- python - 如何使用 numpy 对带有条件的掩码加权平均值进行矢量化?
- django - django:如何实现 public like 按钮
- gitlab - 如何使用管道在 Hashicorp Vault 中编写角色和策略