Android app 中图片需要存放在什么地方?
Where do images need to be stored in and Android app?
我已经阅读了很多有关该主题的文章,但仍然不是很清楚。目前我正在创建一个应用程序,在一个屏幕上加载图像和文本。为了加载图像,我选择了 Glide,但是从哪里读取图像最合适?我通过的所有教程都通过图像的URL。从网上加载不是更慢吗?非常感谢!
如果您喜欢 apk size
,请不要放置这些图像 static
。相反,您可以将这些图像保存在 server
(您的或免费的服务器)上,并使用 Glide
或 Picasso
.
等库轻松加载这些图像
Isn't it slower when loaded from the net?
没有。它将下载图像一次,然后将其缓存以备将来使用。所以速度非常快。
如果您认为 apk size
对您来说无关紧要,并且用户不应该因为互联网不可用而面临问题,那么您可以在应用程序本身中保持这些图像静态。
如果你想构建一个使用动态图像的应用程序,或者你想更新你的图像而不更新你的应用程序,从服务器获取它们更好。在我看来,毕加索易于使用且直接。还使用它自己的框架缓存。但如果您认为您的图像不会改变,请将它们放在资产文件夹中,以便它们位于应用程序的内部存储器中。从服务器获取它们有缺点,比如您需要使用占位符图像,因为它们不会立即被检索。
如果您希望图像始终来自网络,则必须使用缓存机制。我遵循的系统是这样的:(PS。我用的是Picasso,又快又靠谱):
Picasso.with(this).load(URL).networkPolicy(NetworkPolicy.OFFLINE). //load from cache first time
into(imageView, new Callback() { //Picasso Callback
@Override
public void onSuccess() {
if(isNetworkAvailable()) { // if network available then update the cache for this URL
Picasso.with(MyActivity.this).invalidate(URL);
}
progress.setVisibility(View.GONE); // Progressbar
}
@Override
public void onError() { // Image not loaded, try again one last time
Picasso.with(MyActivity.this).load(URL).into(imageView, new Callback() {
@Override
public void onSuccess() {
progress.setVisibility(View.GONE);
}
@Override
public void onError() {
progress.setVisibility(View.GONE);
}
});
}
});
我已经阅读了很多有关该主题的文章,但仍然不是很清楚。目前我正在创建一个应用程序,在一个屏幕上加载图像和文本。为了加载图像,我选择了 Glide,但是从哪里读取图像最合适?我通过的所有教程都通过图像的URL。从网上加载不是更慢吗?非常感谢!
如果您喜欢 apk size
,请不要放置这些图像 static
。相反,您可以将这些图像保存在 server
(您的或免费的服务器)上,并使用 Glide
或 Picasso
.
Isn't it slower when loaded from the net?
没有。它将下载图像一次,然后将其缓存以备将来使用。所以速度非常快。
如果您认为 apk size
对您来说无关紧要,并且用户不应该因为互联网不可用而面临问题,那么您可以在应用程序本身中保持这些图像静态。
如果你想构建一个使用动态图像的应用程序,或者你想更新你的图像而不更新你的应用程序,从服务器获取它们更好。在我看来,毕加索易于使用且直接。还使用它自己的框架缓存。但如果您认为您的图像不会改变,请将它们放在资产文件夹中,以便它们位于应用程序的内部存储器中。从服务器获取它们有缺点,比如您需要使用占位符图像,因为它们不会立即被检索。
如果您希望图像始终来自网络,则必须使用缓存机制。我遵循的系统是这样的:(PS。我用的是Picasso,又快又靠谱):
Picasso.with(this).load(URL).networkPolicy(NetworkPolicy.OFFLINE). //load from cache first time
into(imageView, new Callback() { //Picasso Callback
@Override
public void onSuccess() {
if(isNetworkAvailable()) { // if network available then update the cache for this URL
Picasso.with(MyActivity.this).invalidate(URL);
}
progress.setVisibility(View.GONE); // Progressbar
}
@Override
public void onError() { // Image not loaded, try again one last time
Picasso.with(MyActivity.this).load(URL).into(imageView, new Callback() {
@Override
public void onSuccess() {
progress.setVisibility(View.GONE);
}
@Override
public void onError() {
progress.setVisibility(View.GONE);
}
});
}
});