public class DataManager extends IntentService {
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
super.onDestroy();
}
public DataManager() {
super("DataManager");
setIntentRedelivery(true);
}
@Override
protected void onHandleIntent(final Intent intent) {
// download and parsing task done here
}
}
これは私がファイルをダウンロードして解析する目的で使用するインテントサービスです。今、私はファイルのダウンロードのための新しい要求を取得する場合、私は進行中のタスクをクリアし、古い要求をキャンセルする新しい要求のダウンロードを開始する必要があります。だから私はそれを行うために以下のコードを使用します:。複数のバックグラウンドタスクを並列に実行する同じインテントサービス
private void refreshSync() {
context.stopService(new Intent(context, DataManager.class));
final Intent mServiceIntent = new Intent(context, DataManager.class);
mServiceIntent.putExtras(bundle);
context.startService(mServiceIntent);
}
ので、サービスが殺され、サービスを開始するための次の要求がintentedされます。しかし、以前のタスクは、ダウンロードを実行する2つの並列タスクの実行を再び開始します。基本的に、私が意図した前のタスクは殺されません。
サービスの進行中のタスクを強制終了し、別の新しいタスクを開始するための回避策はありますか?
私の知る限りでは(そして文書https://developer.android.com/reference/android/app/IntentService.htmlに記載されています)、一度に1つのタスクしか実行できません。したがって、onHandleIntent実装では間違いかもしれません。ファイルの読み込み方法を詳しく説明できますか? –
s3からretrofitコールを使用して複数のファイルをダウンロードし、データベースごとに1つずつ保存します – Ankur
レトロフィットコールは同期していますか?さもなければ、サービスは彼らの進歩を担当しない。また、レトロフィット自体を介してリクエストを取り消したい場合もあります。どのように2つのタスクが並行して実行されることを理解していますか? –