我有一个代码片段,我试图将记录插入到我从服务器获取的 Sqlite DB 中。我正在使用PhoneGap Sqlite 插件。数据有时长度为 2000 - 5000,因此插入这些数据大约需要 10-15 秒。
基本上,我使用 Sprite 概念(www.spritely.net/)显示加载屏幕。加载屏幕很快就会启动 ajax 调用,但问题是当响应到来并且代码片段运行以插入记录时,加载屏幕以及 UI 的其余部分都会挂起。
这是代码片段,
// Save the assignment
this.saveAssignment = function(iAssignmentObj, iCallback) {
try {
this.db.transaction(function(iTx) {
iTx.executeSql('INSERT OR IGNORE INTO ASSIGNMENT (ID, SAMPLER_ID, ADDRESS_ID, ASSIGNMENT_DATE, LAST_UPDATE_TIME, STATUS) VALUES (?,?,?,?,?,?)',
[iAssignmentObj.Id, iAssignmentObj.SamplerId, iAssignmentObj.AddressId,
!!iAssignmentObj.AssignmentDate ? iAssignmentObj.AssignmentDate.getTime().toString(): '0',
!!iAssignmentObj.LastUpdateTime ? iAssignmentObj.LastUpdateTime.getTime().toString(): '0', iAssignmentObj.Status],
function() {
iCallback(true);
},
function() {
iCallback(false);
}
);
});
}
catch(iException) {
console.log('local storage transaction failed for inserting assignment with id '+iAssignmentObj.Id);
iCallback(false);
}
};
我这样称呼这个函数
// Process the response for Assignments
this.processResponseForAssignments = function(iData, iIndex, iCallback) {
var selfObj = this;
if(iIndex>=iData.length) {
iCallback();
}
else {
selfObj.saveAssignment(iData[iIndex], function(iBoolean) {
if(iBoolean) {
console.log('Assignment with Id : '+iData[iIndex].Id+' Inserted Successfully');
}
else {
console.log('Unable to insert Assignment with Id : '+iData[iIndex].Id);
}
selfObj.processResponseForAssignments(iData, iIndex+1, iCallback);
});
}
};
我担心的问题是,这段代码与 iOs 完美配合,带有适用于 iOs 的PhoneGap Sqlite 插件,无需挂起 UI,但它在 Android 上很疯狂。
请建议我还需要什么才能使其在 Android 中顺利运行。