0

我正在从 sd 卡读取图像并将其显示在我的 phonegap 应用程序的图库中。我有两个从中读取内容的文件夹。一种是同步文件夹和非同步文件夹。代码如下:

 listGalleryContents(synchedsdcardfolder, function() {
    listGalleryContents(unsynchedsdcardfolder, function() {
        showGalleryPage();
    });
 });




function listGalleryContents(directoryEntry, onComplete) {
var directoryReader = directoryEntry.createReader();
directoryReader.readEntries(function(entries) { // success get files and folders
    for(var i=0; i<entries.length; ++i) {
        if(entries[i].name.indexOf(".") > 0 && entries[i].isFile) {
            imagesArray.push(entries[i].fullPath);
        }
    }
    onComplete();
} , function(error){ 
    alert("Error: = " + error.code);
});
}

当我有太多图像无法从 SD 卡中读取时,问题就出现了。当我单击图库视图时,加载图像需要很长时间。请问有什么方法可以使其响应更快并提高性能吗?

4

1 回答 1

1

Javascript 是单线程的,因此回调将在阻塞 UI 的同一主线程中触发。尝试将您的代码更改为:

listGalleryContents(synchedsdcardfolder, loadUnSyncedFolder);

function loadUnSynchedFolder() {
   setTimeout(function() {
       listGalleryContents(unsynchedsdcardfolder, allFoldersLoaded);
   }, 0);
}

function allFoldersLoaded() {
   setTimeout(showGalleryPage, 0);
}

function listGalleryContents(directoryEntry, onComplete) {
var successCallback = onComplete;
var directoryReader = directoryEntry.createReader();
directoryReader.readEntries(
     function(entries) { readSuccess(entries, successCallback); } , 
     function(error){ 
        alert("Error: = " + error.code);
     });
}

function readSuccess(entries, onComplete) { // success get files and folders
    var i = 0, length = entries.length; 
    for(; i < length ; ++i) { // why are you using ++i and not i++ ??
        if(entries[i].name.indexOf(".") > 0 && entries[i].isFile) {
            imagesArray.push(entries[i].fullPath);
        }
    }
    onComplete();
   }
}

我没有测试过这段代码。如果您看到错误,您可能需要对其进行少量修改。

于 2012-09-24T21:13:49.910 回答