启动Android服务并更改首选项
正如我今天的代码所示,我使用启动Android服务并更改首选项,android,service,alarmmanager,Android,Service,Alarmmanager,正如我今天的代码所示,我使用AlarmManager定期发送警报(?),该警报由AlarmReceiver接收,然后启动服务。该服务执行一些更新,并以stopSelf()结束。在我看来,这是定期执行任务而无需持续运行服务的最佳方式。对吗 但是,此代码的问题是,整个事件链都是在SharedPreferenceChanged()上启动的。我(最初)认为这是个好主意,因为整个更新都是由用户在SharedReferences中启用的。 我现在得出结论,这实际上不是很好,我需要启动AlarmManager
AlarmManager
定期发送警报(?),该警报由AlarmReceiver
接收,然后启动服务。该服务执行一些更新,并以stopSelf()
结束。在我看来,这是定期执行任务而无需持续运行服务的最佳方式。对吗
但是,此代码的问题是,整个事件链都是在SharedPreferenceChanged()上启动的。我(最初)认为这是个好主意,因为整个更新都是由用户在SharedReferences
中启用的。
我现在得出结论,这实际上不是很好,我需要启动AlarmManager/AlarmReceiver/Service/无论什么onPreferenceChange
还是启动
我已经做了一些搜索,但每个人似乎都想在开机时启动服务。在我看来,我只需要启动AlarmManager
,然后它将启动服务(在需要时并且只定期启动)
请帮助我,首先,整理这个,然后编码它!
提前谢谢 然后,创建并注册一个
BroadcastReceiver
,您将在其中执行AlarmManager
操作:
public class YourBootReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// do the AlarmManager here
}
}
然后,在你的舱单上:
<application>
... other stuff
<receiver android:name=".YourBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
... 其他东西
然后,创建并注册一个BroadcastReceiver
,您将在其中执行AlarmManager
操作:
public class YourBootReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// do the AlarmManager here
}
}
然后,在你的舱单上:
<application>
... other stuff
<receiver android:name=".YourBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
... 其他东西
谢谢!我现在的代码呢?我应该保留它吗?在我看来,这种方法最终可能会导致AlarmManager(根据用户定义的时间间隔触发警报)使更新运行的频率达到预期的两倍…?谢谢!我现在的代码呢?我应该保留它吗?在我看来,这种方法可能会让我最终导致AlarmManager(根据用户定义的间隔触发警报)使更新运行的频率达到预期的两倍。。。?