0

SD カードから画像を読み取り、phonegap アプリケーションのギャラリーに表示しています。コンテンツを読み取るフォルダーが 2 つあります。1 つは、同期されたフォルダーと同期されていないフォルダーです。コードは次のとおりです。

 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 に答える