我有联系人列表,可以在一段时间内保存。我应该每天更新储蓄条款。简单地说,每天所有联系人的条款减去一天。
我看到两种可能的解决方案:
1)服务,每天指定时间使用AlarmManager更新内容。
2)记住应用程序的最后一次启动,检查差异并从存储的条款中扣除此差异。
在我看来,第二种方法的性能效率更高。有人可以建议吗?
我有联系人列表,可以在一段时间内保存。我应该每天更新储蓄条款。简单地说,每天所有联系人的条款减去一天。
我看到两种可能的解决方案:
1)服务,每天指定时间使用AlarmManager更新内容。
2)记住应用程序的最后一次启动,检查差异并从存储的条款中扣除此差异。
在我看来,第二种方法的性能效率更高。有人可以建议吗?
如果您打算每天使用 AlamManager 运行一次服务,它的性能/电池效率将更高。
如果服务不必在每天的确切时刻运行,则可以通过使用RTC
而不是RTC_WAKEUP
.
这样您的应用程序不会唤醒 CPU,而是在用户再次使用手机时执行任务。(如果警报已经迟到)。但是,如果该服务每天没有运行多次,您仍然不必太担心......把它想象成一个闹钟,每天通过响铃唤醒您,不会耗尽您的电池。
我解决了我的问题。
我使用方法,该方法在类中的 onCreate() 方法中调用,该方法从 Application 类扩展:
private void setRecurringAlarm(Context context) {
Intent intent = new Intent(AlarmReceiver.ACTION_ALARM);
AlarmManager alarms = (AlarmManager) this
.getSystemService(Context.ALARM_SERVICE);
final PendingIntent pIntent = PendingIntent.getBroadcast(this,
1234567, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarms.setRepeating(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis(), AlarmManager.INTERVAL_DAY, pIntent);
Toast.makeText(getApplicationContext(), "started", Toast.LENGTH_SHORT).show();
}
我的 AlarmReceiver 类:
public class AlarmReceiver extends BroadcastReceiver {
private static final String DEBUG_TAG = "AlarmReceiver";
public static String ACTION_ALARM = "com.alarammanager.alaram";
@Override
public void onReceive(Context context, Intent intent) {
Intent downloader = new Intent(context, UpdateService.class);
downloader.setAction(Constants.UPDATE_SERVICE);
context.startService(downloader);
Toast.makeText(context, "Entered", Toast.LENGTH_SHORT).show();
}
}
和我的服务,其中执行所需的操作:
public class UpdateService extends IntentService {
Boolean isRunning = false;
private ContentRepository _contentRepo;
public UpdateService() {
super("UpdateService");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
faq = new FrequentlyUsedMethods(this);
_contentRepo = new ContentRepository(this.getContentResolver(), this);
this.context = this;
if (!isRunning)
archiveDaysDeduct();
return START_REDELIVER_INTENT;
}
private void archiveDaysDeduct()
{
isRunning = true;
Log.i("updateService", "archiveDaysDeduct");
ArrayList<ContactItem> contacts = faq.getDisplayContacts(this);
Toast.makeText(getApplicationContext(), "update service and I'm here", Toast.LENGTH_LONG).show();
DatabaseHandler db = new DatabaseHandler(context.getApplicationContext());
Dao<ContactItem,Integer> daoContact = null;
String yourDate = faq.getCurrentDate();
if (SharedPrefs.getInstance().getSharedPrefs()!=null)
if (!SharedPrefs.getInstance().getSharedPrefs().getString(Constants.CURRENT_DATE, "").equalsIgnoreCase(yourDate))
{
SharedPrefs.getInstance().getSharedPrefs().edit().putString(Constants.CURRENT_DATE, yourDate);
try {
daoContact = db.getContactDao();
}
catch(Exception e)
{
e.printStackTrace();
}
Toast.makeText(getApplicationContext(), "I'm going to decrement the save dates", Toast.LENGTH_SHORT).show();
UpdateBuilder<ContactItem, Integer> updateBuilder = daoContact.updateBuilder();
DeleteBuilder<ContactItem, Integer> daoContactDelete = daoContact.deleteBuilder();
Log.i("contacts size in update service", Integer.toString(contacts.size()));
for (ContactItem a : contacts)
{
if (a.getDays()==0)
{
try {
daoContactDelete.where().eq("id", a.getId());
daoContact.delete(daoContactDelete.prepare());
}
catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else
{
try {
Log.i("contacts to update days", a.toString());
a.setDays(a.getDays()-1);
daoContact.update(a);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
stopSelf();
}
}
}
}