当手机进入待机状态时,CPU会停止工作,从而导致所有的进程停止其执行。 您可以通过使用PowerManager避免这种情况并锁定CPU,以保证它将停留在即使当手机进入待机:
m_wakeLock = m_powerManager.newWakeLock(
PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
m_wakeLock.acquire();
... cpu is assured to be on during this time ...
m_wakeLock.release();
但既然你需要的是有服务,唤醒每15分钟,即使在待机状态下,这可能会导致电池使用过度。 您可以通过使用AlarmManager来避免这种情况,该功能会每隔15分钟安排一次事件,然后启动相应的BroadcastReceiver。 在BroadcastReceiver中,您只需通过intent(通过intent启动带有参数的服务)向您的服务发送消息,获取cpu,完成工作并释放cpu。
-------------------------- UPDATE ------------------- ------
首先,声明你的广播接收器在您的清单:
<receiver
android:name="StartUpReceiver"
<intent-filter>
<action android:name="my.Package.MyEvent" />
<category android:name="android.intent.category.HOME" />
</intent-filter>
</receiver>
你的广播接收器将目光类似于此:
public class StartUpReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent();
serviceIntent.setAction("my.Package.MyService");
context.startService(serviceIntent);
}
}
这样,每次使用例如sendBroadcast(意图)方法()启动具有动作“my.Package.MyEvent”的意图),您的广播接收器(即扩展BroadcastReceiver类CHECK HERE的类)将执行onReceive()方法。 在我的代码中,我只需用适当的操作(“my.Package.MyService”)创建一个Intent,然后启动MyService。
AlarmManager类只是简单地为您提供一种安排将来启动的一些意向的方法,类似于sendBroadcast()方法(CHECK HERE)。 在与AlarmManager关联的onReceive()方法的所有执行过程中,Cpu都将保持打开状态。然后你需要锁定CPU,启动现在确定要执行的服务。与此同时,onReceive()方法将停止,但您的服务将确保执行。 您需要做的唯一事情就是找到一个解决方法,让您的服务与您的AlarmManager进行通信,在服务执行后释放CPU锁,如AlarmManager的主页所述。 也就是说,您只需要将您的服务与您的广播接收器同步,即使用外部对象来保存所需的信息(在这种情况下,如果cpu在服务发布cpu结束时被锁定)。
当然,如果服务每15分钟执行一次,那么如果它确定没有连接或无法及时得到响应,那么您的服务应该进入休眠状态并等待下一个15分钟的唤醒打电话。 –
你为什么选择不使用'AlarmManager'或'BroadcastReciever'? – gobernador