我有一个必须每天00:00执行的应用程序,因此我使用AlarmManager
来设置警报。
这是我用来设置警报的类:
package bembibre.coolstar.windowsmobilewidget.backend.alarms;
import java.util.Calendar;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
public class AlarmSetter{
private Context mContext;
private AlarmManager mAlarmManager;
public AlarmSetter(Context context){
mContext = context;
mAlarmManager =
(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
}
public void setAlarm(Calendar when){
Intent i = new Intent(mContext, OnAlarmReceiver.class);
PendingIntent pi =
PendingIntent.getBroadcast(mContext, 0, i, PendingIntent.FLAG_ONE_SHOT);
mAlarmManager.set(AlarmManager.RTC_WAKEUP, when.getTimeInMillis(), pi);
}
}
当时钟到达00:00时,我的类onReceive()
的{{1}}方法被调用,设备总是自动唤醒(我想AlarmManager是谁做的)但是当{{1}时方法完成后,设备会持续保持清醒状态,永远不会进入睡眠状态。我不会管理唤醒锁,因为onAlarmReceiver
会让设备保持清醒直到onReceive
方法完成,而我必须做的工作非常轻松。我的AlarmManager
课程是这样的:
onReceive
方法onAlarmReceiver
非常轻。我已经读过我应该做的是让package bembibre.coolstar.windowsmobilewidget.backend.alarms;
import bembibre.coolstar.windowsmobilewidget.ExtendedAppWidgetProvider;
import bembibre.coolstar.windowsmobilewidget.ListItemClickService;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class OnAlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ExtendedAppWidgetProvider.setDayChangeAlarm(context);
new ListItemClick(context).update();
}
}
成为一个IntentService,在调用update()
之前获取一个唤醒锁,启动ListItemClick
,并在其内部完成后,释放唤醒锁定。但这个唤醒者将是我的。 AlarmManager未发布唤醒锁将继续保持设备唤醒直到无限。所以我什么都不懂。假设有两个唤醒锁,AlarmManager唤醒锁和矿井,我释放矿井,AlarmManager唤醒锁将继续发布。