对我来说,很难理解下载 json 数据并在 ListView 中显示它们的正确工作流程。目前我正在使用 AsyncTask 下载和解析使用 ArrayAdapter 显示的数据。问题是 AsyncTask 在活动重新启动后无法生存。
所以我想知道服务是否是一个更好的解决方案但是如何将数据传递给 ArrayAdapter?我应该总是使用数据库作为中间层来存储和检索数据吗?
那么哪个更好呢?使用数据库的保留片段或服务中的AsyncTask?
谢谢
对我来说,很难理解下载 json 数据并在 ListView 中显示它们的正确工作流程。目前我正在使用 AsyncTask 下载和解析使用 ArrayAdapter 显示的数据。问题是 AsyncTask 在活动重新启动后无法生存。
所以我想知道服务是否是一个更好的解决方案但是如何将数据传递给 ArrayAdapter?我应该总是使用数据库作为中间层来存储和检索数据吗?
那么哪个更好呢?使用数据库的保留片段或服务中的AsyncTask?
谢谢
我使用一项服务来进行 http 数据检索和存储到 sqlite db。一旦服务存储了数据(或者如果有问题),我就会发出广播。我的片段/活动监听这些定义的广播,然后采取适当的行动。
我发现这是一个非常干净的解决方案,并且避免了在活动拆卸/旋转等时泄漏 asynctask 引用的问题。
最简单的解决方案是返回您当前的 AsyncTaskonRetainNonConfigurationInstance
或使用带有 setRetainInstance(true) 的 Fragment。
您可以使用 inCreate 访问 AsyncTaskgetLastNonConfigurationInstance
这实际上取决于 Activity 究竟需要什么以及数据可以显示多长时间而不再次访问服务的要求。
解决上述问题的一种方法是,点击服务获取 json 数据并将其存储在数据库中。现在从数据库中获取数据并将其显示在 Activity 中。您现在可以实现一项服务以在需要时刷新数据。该服务将简单地点击网络服务并在需要时更新您的数据库内容。