2015 年 4 月更新:从 Titanium 3.X 开始,根据 Gautier 的回答,图像中有缓存
默认情况下,ImageView 中不缓存远程图像。在您的场景中,当您切换回远程图像时,它会再次重新下载。
在我的大多数项目中,我创建了一个缓存图像视图,用于在下载后保存本地图像。这是受到 Dawson Toth 在https://gist.github.com/938172 工作的启发。唯一的问题是,如果图像在本地缓存后在服务器上发生更改,除非文件名更改,否则客户端不会获得更新的图像。代码如下。
exports.createCachingImageView = function(params) {
var image = Ti.UI.createImageView();
image.doRemote = function(imageURL) {
image.remoteImage = imageURL;
var file = Ti.Filesystem.getFile(somedirectory, image.localFileName(imageURL));
if(!file.exists()) {
// cached file does not exist, load the image
image.addEventListener("load", image.saveImageOnLoad);
image.image = imageURL;
} else {
Ti.API.debug(image.localFileName(imageURL) + ' does exist, just setting image');
image.image = file.nativePath;
}
};
image.saveImageOnLoad = function(e) {
Ti.API.debug('saving image ' + image.localFileName(image.remoteImage));
var f = Ti.Filesystem.getFile(somedirectory, image.localFileName(image.remoteImage));
if(!f.read()) {
f.write(e.source.toBlob());
}
e.source.removeEventListener('load', image.saveImageOnLoad);
};
image.localFileName = function(imageURL) {
hashedSource = Ti.Utils.md5HexDigest(imageURL + '');
return hashedSource;
};
if(params.image) {
image.doRemote(params.image);
}
for(var v in params) {
if(v != 'image') {
image[v] = params[v];
}
}
return image;
};
如果你想在不使用 imageView 的情况下单独下载图像,请使用 Ti.Network.httpClient 获取图像并将其保存到文件系统,如下所示:
xhr.onload = function(){
var file = Ti.Filesystem.getFile(somedirectory, somefilename );
file.write(this.responseData);
}
我使用它来提前获取图像,因此当客户使用它们时应该立即获取它们。