私のサービスでは、インターネットからたくさんのものをダウンロードしており、これを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;
}
}