我正在尝试评估使用单个意图进行长时间处理的好处和成本,而不是使用多达五个单独的意图。
我的应用程序的用户从网上下载记录到数据库中的记录。用户可以在任何给定时间下载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个对话框,它会在进程完成之前关闭。
有什么想法,这是更好的方法吗?或许我应该放弃其他方法?
答案 0 :(得分:0)
使用IntentService在后台完成工作。您可以根据需要启动任意数量的意图,但IntentService一次只能处理一个意图。同时,您不会得到超时,用户可以继续工作。我认为用户会接受结果不会立即到达,只要他们在等待时可以做其他事情。
请参阅Android培训课程Running in a Background Service作为示例。