Android应用程序有两个活动。
活动A显示项目列表。活动B显示了有关特定项目的一些详细信息。
详细信息是从一个较大的SQLite数据库中加载的。在一部合理的手机上,用于生成数据的查询大约需要2.5亿至5亿秒。
我的问题是,在提供良好用户体验的同时加载数据的最佳实践是什么。
当前,活动B在创建AsyncTask时执行该任务。任务完成后,它会创建多个视图并将它们添加到屏幕中。UI线程上未加载任何数据。
对于用户来说,"活动B"以漂亮的标准缩放动画打开,然后在几分之一秒后,视图中填充数据。看起来有点垃圾IMO.
另一个选项是在UI线程上加载数据。如果我在正确的时间这样做,那么在加载数据的同时,屏幕会冻结250毫秒的列表项,然后视图会随着标准缩放动画而更改,但它会缩放到一个已经填充的视图中。它看起来好多了,但我屏蔽了UI线程,这并不理想。
当新视图还没有准备好时,实现良好过渡的最佳方式是什么?
要么放置一个progress dialog
用于加载数据任务,如果不放置,则。。
您可以使用AsyncTask
的onProgressUpdate()
方法将结果数据从数据库间歇性更新到UI。。
protected void onProgressUpdate(Integer... progress) {
//this runs in UI thread so its safe to modify the UI
myTextField.append("finished call " + progress);
}
•onProgressUpdate
–每当从后台任务调用publishProgress时都会调用,用于向UI报告进度。
此外,您还可以使用sqlite database
的LIMIT
和OFFSET
子句从数据库中提取数据,并在您的select query
中绑定返回结果数,以从数据库中获取大量数据。。
示例:
Select * from Animals LIMIT 100 OFFSET 50