私のサービスでは、インターネットからたくさんのものをダウンロードしており、これをx時間ごとに実行したいと考えています([設定]で選択)
私がメインアクティビティでこのコードに書いた現在の実装:
    Intent svc = new Intent(this, AlarmService.class);
    if (startService(svc)!=null) {
        Log.i(this.getClass().toString(), "Service already running");
    } else {
        Log.i(this.getClass().toString(), "Service Started");
    }
なぜなら、ドキュメントによると
特定のアプリケーションサービスの開始を要求します。インテントには、開始する特定のサービス実装の完全なクラス名、または開始するサービスの種類のアクションおよびその他のフィールドによる抽象的な定義のいずれかを含めることができます。このサービスがまだ実行されていない場合は、インスタンス化されて開始されます(必要に応じてプロセスを作成します)。実行中の場合は実行中のままです。
私が強調した最後の文は、サービスのonCreateにすべての重いコードを記述でき、それが変更されないことを願っていますが、残念ながら、ユーザーがアプリを起動するたびに、サービスが再開され、大量のダウンロードが行われ、無駄になりますバッテリー。
サービスが実行されているかどうかの表示は正しいです:
戻り値サービスが開始されているか、すでに実行されている場合、開始された実際のサービスのComponentNameが返されます。それ以外の場合、サービスが存在しない場合はnullが返されます。
それで、私の質問、サービスがすでに開始されている場合はそのままにして、まだ開始されていない場合はサービスを開始するにはどうすればよいですか?
ありがとう
編集:
サービスは停止しませんでした:
public class AlarmService extends Service {
    Alarm alarm = new Alarm();
    public void onCreate() {
        super.onCreate();
        Log.i("**", "onCreate");
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i("LocalService", "Received start id " + startId + ": " + intent);
        // DO NOTHING FOR TESTING alarm.SetAlarm(this);
        return START_STICKY;
    }
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}