0

我正在尝试评估在长期过程中使用单个意图与使用最多五个单独意图的收益和成本。

我的应用程序的用户从网络下载记录,这些记录被解析为数据库。用户可以在任何给定时间下载 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 一次只会处理一个。同时,您不会超时,用户可以继续工作。我认为用户会接受结果不会立即到达,只要他们在等待时可以做其他事情。

请参阅 Android 培训课程在后台服务中运行作为示例。

于 2013-03-26T22:15:41.003 回答