现在我正在使用Web服务检索存储在服务器中的图像和文本。我正在使用SOAP来消费它。但问题是,每次我打开应用程序时,它都会重新开始加载。再次。这是因为在Activity的oncreate方法中我调用了asynctask,它在后台加载数据。
我想按顺序实现,首先我将从webservice中检索数据,然后在我的应用程序中显示它们。现在,如果我关闭我的应用并再次打开它,或者如果那时互联网没有连接,它应该显示上次会话期间加载的数据。怎么实现这个????请分享您的想法
谢谢&预先
答案 0 :(得分:1)
您可以使用磁盘缓存从远程服务缓存位图,有关如何在Google开发者网站上执行此操作的详细信息http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html
如果没有连接,或者您想在加载远程图像时加载图像,这将允许您存储图像并立即显示。
根据您需要存储的文本,您可以将文本与缓存中的图像相关联,或者使用数据设置ArrayList并存储到磁盘。这里有一些更详细的信息Best Way to Cache Data in Android
最后,有一些工具可以确保您充分利用网络代码,例如AT& T ARO工具,运行此工具可以帮助您通过将网络呼叫降至最低来优化您的应用。见http://developer.att.com/aro
答案 1 :(得分:0)
如果你想实现类似的东西......你应该为你的应用程序创建一个数据库,以便在关闭应用程序时不会删除数据。
因为如果您的应用不是活动应用,那么除了其他所有选项之外,您的数据可能会被GC删除。
然后你应该创建一个服务,它将运行每个指定的时间,并将检查 用于互联网连接,如果它发现它是否检查服务器中是否有新数据。
答案 2 :(得分:0)
我认为如果更改设备的方向,将会出现相同的行为。这是因为在重新创建应用程序时,会调用相同的方法。您应该在加载图像的函数内部设置一个标志,然后在onCreate()
和onResume()
方法中检查是否设置了标志并停止调用该函数。看看是否有帮助。
干杯
答案 3 :(得分:0)
如果您想再次“重新使用”这些图像,可以考虑将它们缓存到设备SD卡中。 例如:
FileOutputStream outFile = new FileOutputStream(path);
image.compress(Bitmap.CompressFormat.JPEG, 100, outFile);
outFile.close();
然后从SD卡接收该文件并通过BitmapFactory
可能在您的活动'onResume()
方法中通过某些逻辑对其进行解码(例如,检测设备是否连接到Internet等。 ):
File imageFile = new File(path);
Bitmap bitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath());
请记住添加访问SD卡的必要权限:)
答案 4 :(得分:0)
Android实现 MVC (模型 - 视图 - 控制器)模式,您只需重用(在大多数情况下)现有的 View 类并实现 Controller 和 Model 。您的活动是控制器。但是下载数据等操作应该由 Model 完成。
因此,您必须为活动销毁和创建(特别是在方向更改时发生)的数据创建一个类。
从AsyncTask
调用Activity
是完全错误的。
此外,请记住,在某些情况下,Android可能会终止并重新启动应用程序进程,从而导致RAM中保留的任何数据丢失。 (但您可以保证看到onPause()
通知。)但是您的应用程序必须能够从此类重新启动中恢复。请参阅onSaveInstanceState(Bundle)
和Bundle参数
onCreate (Bundle savedInstanceState)
。
另见: Is AsyncTask really conceptually flawed or am I just missing something?