Don't show progress for every app being processed from index.xml.

Rather, only show 25 progress events. I went with "25 events" rather
than "every X apps" because then it will be nice for both large repos
(e.g. F-Droid will update every ~50 apps) and small repos (something
with 20 apps will update for every one, but not add much overhead).

On my testing with an API 11 emulator here, it went from ~32s to
process ~1100 apps to ~20s. When no progress events are sent, then it
also takes ~20s, so this essentially is a 50% improvement for this part
of the update process.
This commit is contained in:
Peter Serwylo 2014-09-18 13:53:09 +10:00
parent 481cd91646
commit e4401ed22c
2 changed files with 10 additions and 7 deletions

View File

@ -21,6 +21,8 @@
* Initial support for root and system installers, allowing the client to
install apks directly on its own
* Increased performance when updating from repository with many apps
* Switch to Appcompat from the Support library
* Fix some crashes

View File

@ -279,14 +279,15 @@ public class RepoXMLHandler extends DefaultHandler {
} else if (localName.equals("application") && curapp == null) {
curapp = new App();
curapp.id = attributes.getValue("", "id");
if (progressCounter % (totalAppCount / 25) == 0) {
Bundle data = new Bundle(1);
data.putString(RepoUpdater.PROGRESS_DATA_REPO_ADDRESS, repo.address);
progressListener.onProgress(
new ProgressListener.Event(
RepoUpdater.PROGRESS_TYPE_PROCESS_XML,
progressCounter, totalAppCount, data));
}
progressCounter ++;
Bundle data = new Bundle(1);
data.putString(RepoUpdater.PROGRESS_DATA_REPO_ADDRESS, repo.address);
progressListener.onProgress(
new ProgressListener.Event(
RepoUpdater.PROGRESS_TYPE_PROCESS_XML,
progressCounter, totalAppCount, data));
} else if (localName.equals("package") && curapp != null && curapk == null) {
curapk = new Apk();
curapk.id = curapp.id;