启动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(根据用户定义的间隔触发警报)使更新运行的频率达到预期的两倍。。。?