我想在一个月后自动删除SharedPreferences(如果存在)。我找不到任何解决方案。这有可能吗?
非常感谢。
答案 0 :(得分:0)
long installed = context
.getPackageManager()
.getPackageInfo(context.getPackageName(), 0)
.firstInstallTime
;
public long firstInstallTime
首次安装该应用程序的时间。单位按照System.currentTimeMillis().
现在,您可以使用GregorianCalendar比较两个日期并获得不同的月份
一个月后,您可以根据自己的意愿做..清除sharedPrefrence.edit().clear().commit()
答案 1 :(得分:0)
要视情况而定。
最简单的方法是在用户启动应用程序时将其删除。 创建应用程序后,您将检查SharedPreferences的最新更新时间。 如果为空(第一次),则将当前时间(以毫秒为单位)保存为很长的时间。 如果不为空,则将其读取并将其与当前时间进行比较。如果不到一个月,您什么也不做。如果超过一个月,则清除共享的首选项,并在清除共享首选项后插入新时间。
类似的东西:
long lastUpdate = sharedPreferences.getLong(LAST_UPDATE, -1);
if(lastUpdate == -1) {
//First time
sharedPreferences.edit().putLong(LAST_UPDATE, System.currentTimeMillis()).apply();
} else {
boolean isMoreThanAMonth = //Here you should do the math. it depends, you want to consider a month like 30 days, or you want to know if it was in another month... somehthing like that
if(isMoreThanAMonth) {
sharedPreferences.edit().clear().apply()
}
}
当然,如果即使用户未打开应用程序也要清除SharedPreferences,则应使用服务。对于操作系统而言,它更为复杂且昂贵,因此,如果需要,您应该尝试第一个。
答案 2 :(得分:0)
一种可能的方法,
1.获取日历实例。
2.获得最大月份数。
3.以dd / mm / yyyy格式存储在var1字符串中。
4.从某个日历对象获取当前日期,并以与第3点相同的方式存储在var2中。
5.比较两个字符串。
6.如果匹配,那么它将是该月的最后一天,并在文件上调用delete()。
完成。