L'une de mes applications ne quelque chose de très similaire. Pour réactiver le service après une période donnée, je recommande postDelayed()
Disposer d'un gestionnaire de champ:
private final Handler handler = new Handler();
et un cours de recyclage Praticable
private final Runnable refresher = new Runnable() {
public void run() {
// some action
}
};
Vous pouvez mettre le feu à vos Notifications dans l'exécutable.
Sur le service de la construction, et après chaque exécution démarrer comme ceci:
handler.postDelayed(refresher, /* some delay in ms*/);
Dans onDestroy() supprimer le post
handler.removeCallbacks(refresher);
Pour démarrer le service au démarrage vous avez besoin d'une auto starter. Cela va dans votre manifeste
<receiver android:name="com.example.ServiceAutoStarter">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
et le ServiceAutoStarter ressemble à ceci:
public class ServiceAutoStarter extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
context.startService(new Intent(context, UpdateService.class));
}
}
L'arrêt du système d'exploitation à partir de tuer le service est délicat. Aussi votre application peut avoir une RuntimeException et de crash, ou votre logique peut caler.
Dans mon cas, il semblait aider à toujours actualiser le service sur l'écran avec un BroadcastReceiver. Donc, si la chaîne de mises à jour devient bloqué, il sera ressuscité en tant que l'utilisateur utilise son téléphone.
Dans le service:
private BroadcastReceiver screenOnReceiver;
Dans votre service onCreate()
screenOnReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Some action
}
};
registerReceiver(screenOnReceiver, new IntentFilter(Intent.ACTION_SCREEN_ON));
Alors annuler l'inscription de votre service sur onDestroy() avec
unregisterReceiver(screenOnReceiver);