複数のタブを持つ Android アプリケーションを作成しています。私のタブには次のものがあります。
1 番目のタブ - 雑誌のアーカイブをグリッド ビューで表示します。意図は、グリッド ビューのアイテムをタップしたときに、Web サイトから大きなファイルをダウンロードする必要があることです。このために、ファイルをダウンロードする ASYNC タスクを持つサービスを作成しました。コードを示しました。
public class DownloadArchivesService extends BaseService {
private static final String TAG = "DownloadArchivesServices";
private static final String STOP = "stop_modificator";
public static final String ALREADY_RUNNING= "DownloadArchivesService_Already_Running";
public static final String ARCHIVES_PERCENTAGE_PROGRESS ="Archives_Percentage_Progress";
public static final String UPDATE_ARCHIVES_PROGRESS = "Update_Archives_Progress";
@Override
public void onCreate() {
getPreferences().edit().putBoolean(ALREADY_RUNNING, true).commit();
application = (JfwApplication)this.getApplicationContext();
context = this;
session = application.getSession();
calendar = Calendar.getInstance();
dateFormat = new SimpleDateFormat("dd-MMM-yyyy");
magazineManager = new MagazineManager(this);
//magazine = new Magazine(fileName, fileName, "", "", this);
new AsyncTask<String, Integer, String>() {
NumberFormat formater = NumberFormat.getPercentInstance(Locale.getDefault());
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
// I do my download here }
@Override
protected void onProgressUpdate(Integer... p) {
if (isCancelled()) {
return;
}
//I udpate my progress bar here }
@Override
protected void onPostExecute(String result) {
Intent intentInvalidate = new Intent(ArchivesActivity.GRID_INVALIDATE);
sendBroadcast(intentInvalidate);
super.onPostExecute(result);
}
}.execute();
super.onCreate();
}
2 番目のタブに移動したら、Web サイトから数枚の写真をダウンロードして画面に表示する必要があります。上記と同様のサービス - DownloadImagesService を作成しました。
しかし、問題は、上記の DownloadArchivesService が実行されているとき (つまり、グリッド ビュー アイテムをタップして DownloadArchivesService を呼び出したとき)、2 番目のタブに移動して写真をダウンロードすることです。DownloadImageService (写真をダウンロードするサービス) は実行されません。 DownloadArchivesService が完了するまで待機します。これにより、ユーザーは最初のサービスが完了するまでしばらく待たされることになります。サービスはメイン スレッドで実行され、1 つのサービスは既に実行中のサービスが実行されるまで待機する必要があることを理解しています。以前に実行されたサービスを待たずに、異なるサービス (またはバックグラウンド タスク) を同時に実行する方法はありますか。
サービス、インテント サービス、およびスレッドに関するさまざまなドキュメントを確認しました。しかし、アンドリッドが同時サービスを処理する方法について、この特定のことを理解できませんでした。
これについて何か助けていただければ幸いです。私の説明が明確でない場合はお知らせください。
ありがとう。