我正在为餐馆开发自定义菜单导航应用程序。我已完成演示应用程序以用于演示目的。我的应用程序包含一堆我添加到资源文件中的图像。现在我想创建一个简短的安装,让人们有机会添加自己的图像和放大器。在运行时将菜单项添加到App。这是我的应用程序的屏幕:
图像将位于AzureBlobStorage上。一个人将能够提供一个唯一的密钥(GUID),然后该应用程序将连接到数据库所在的azure MobileServices,其中包含所有MenuItems(Name,Category,ImageName,...)并将其映射到它自己的本地SQL lite数据库。图像是具有2个不同尺寸的.PNG文件。 (150x150& 1072x611)
我的问题是,一旦创建.APK而不会失去速度,将图像添加到应用程序的最佳方法是什么?
答案 0 :(得分:1)
关于从Azure检索的速度没有什么可以做的(没有选择基于性能的云服务,但Azure可能与任何一样好)并假设您的SQL代码是高效的,Q成为存储/的方式和方式检索以及如何在下载和安装图像时保持UI响应。
我会存储在私有存储中,因为它通常比SDCard具有更高的性能并且具有更少的未知数。
您还应该将较大的图像缩小到最低分辨率,这仍然适用于UI的最高分辨率目标设备。请记住,内存中的位图默认情况下需要x * y * 4个字节,在您的情况下大约为2.6MB。
Android: high quality image resizing / scaling
我假设您显示的主要UI是某种ListView
,因此您应该实现图像的延迟加载,并确保在基础适配器的getView()
中回收它们。
Lazy load of images in ListView
关于从云下载的速度,您无法做很多事情,因此您应该在后台线程上进行此操作,例如: AsyncTask
,并在列表视图中使用占位符图片,直到下载实际图片。使用适配器上的notifyDataSetChanged()
让列表视图知道发生了变化。
http://android-developers.blogspot.co.uk/2010/07/multithreading-for-performance.html
最后,如果您真的想要一个好的Android OOP解决方案,请考虑实施内容提供商。
http://developer.android.com/guide/topics/providers/content-providers.html#creating