0

最大5つの個別のインテントを使用するのではなく、長いプロセスで単一のインテントを使用することの利点とコストを評価しようとしています。

私のアプリのユーザーは、データベースに解析されるWebからレコードをダウンロードします。ユーザーは、いつでも1〜5人のレコードをダウンロードできます。

私はアプリを次のように設定しました:

    private OnClickListener mySubmitOnClick = new OnClickListener() {

    @Override
    public void onClick(View v) {

       ArrayList<String> idsOfRecordsArray = getIdsOfRecordsToDownload();

               Intent intentToRetrieve = new Intent(getActivity(),
                                                  RetrieveData.class);
        Messenger messenger = new Messenger(handler);
        intentToRetrieve.putExtra("MESSENGER", messenger);

        intentToRetrieve.putStringArrayListExtra ("IdList",
                                                     idsOfRecordsArray);

        v.getContext().startService(intentToRetrieve);

        showDialog("Some Message");

        }
      }

これは機能しましたが、データの解析に時間がかかるため、タイムアウトエラーが発生することがありました。

私はそれをこれに変更しました:

    private OnClickListener mySubmitOnClick = new OnClickListener() {

    @Override
    public void onClick(View v) {

       ArrayList<String> idsOfRecordsArray = getIdsOfRecordsToDownload();
               while(iCount < idsOfRecordsArray.size()) {
        ArrayList<String> currentID = new ArrayList<String>();

        currentAthleteID.add(athleteIdArray.get(iCountAthletes));
        Intent intentToRetrieve = new Intent(getActivity(),
                                              RetrieveData.class);
        Messenger messenger = new Messenger(handler);
        intentToRetrieve.putExtra("MESSENGER", messenger);

        intentToRetrieve.putStringArrayListExtra ("IdList",
                                                              currentID);

        v.getContext().startService(intentToRetrieve);

        showDialog("Some Message");

        iCount++;
        }
        }

そのため、最大5つのインテントを同時に起動できるようになりました。これは十分に安定しているようです。ただし、進行状況ダイアログの処理は少し厄介です。ダイアログボックスを1つだけ開くと、プロセスが完了する前に閉じます。

ここでどちらがより良いアプローチであるかについての考えはありますか?それとも、他の方法のために両方を放棄する必要がありますか?

4

1 に答える 1

0

IntentServiceを使用して、バックグラウンドで作業を行います。必要な数のインテントを起動できますが、IntentServiceは一度に1つしか処理しません。その間、タイムアウトは発生せず、ユーザーは作業を続行できます。待っている間に何か他のことができる限り、結果がすぐに届かないことをユーザーは受け入れると思います。

例として、バックグラウンドサービスで実行されているAndroidトレーニングクラスを参照してください。

于 2013-03-26T22:15:41.003 に答える