3

複数のタブを持つ 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 つのサービスは既に実行中のサービスが実行されるまで待機する必要があることを理解しています。以前に実行されたサービスを待たずに、異なるサービス (ま​​たはバックグラウンド タスク) を同時に実行する方法はありますか。

サービス、インテント サービス、およびスレッドに関するさまざまなドキュメントを確認しました。しかし、アンドリッドが同時サービスを処理する方法について、この特定のことを理解できませんでした。

これについて何か助けていただければ幸いです。私の説明が明確でない場合はお知らせください。

ありがとう。

4

2 に答える 2