2011-04-29 75 views
0

正如我今天的代码所示,我使用AlarmManager周期性地发送了一个警报(?),接收到这个警报,然后启动服务。该服务进行一些更新并以stopSelf()结束。海事组织这是定期执行任务而无需持续运行服务的最佳方式。正确?在启动时启动Android服务和PreferenceChange

但是,此代码的问题是,整个事件链发起onSharedPreferenceChanged()。我(最初)认为这是一个好主意,因为用户在SharedPreferences中启用了整个更新。 我现在得出的结论是,这实际上并不是很好,我需要启动AlarmManager/AlarmReceiver/Service /无论是onPreferenceChange还是启动。

我已经做了一些搜索,但似乎每个人都想在启动时启动服务。正如我所看到的,我只需要启动AlarmManager,然后启动服务(在需要时并且只是定期)。

请首先帮我解决这个问题,然后编码! 在此先感谢!

回答

3

然后,创建并注册一个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" /> 
+0

谢谢!我现在的代码呢?我应该保留它吗?在我看来,这种方法可能会让我最终走向报警管理器(每个按照用户定义的时间间隔发射报警),使更新运行的次数达到预期的两倍...? – Adam 2011-04-30 09:16:44