在后台线程上无延迟加载视图的数据时的最佳实践



Android应用程序有两个活动。

活动A显示项目列表。活动B显示了有关特定项目的一些详细信息。

详细信息是从一个较大的SQLite数据库中加载的。在一部合理的手机上,用于生成数据的查询大约需要2.5亿至5亿秒。

我的问题是,在提供良好用户体验的同时加载数据的最佳实践是什么。

当前,活动B在创建AsyncTask时执行该任务。任务完成后,它会创建多个视图并将它们添加到屏幕中。UI线程上未加载任何数据。

对于用户来说,"活动B"以漂亮的标准缩放动画打开,然后在几分之一秒后,视图中填充数据。看起来有点垃圾IMO.

另一个选项是在UI线程上加载数据。如果我在正确的时间这样做,那么在加载数据的同时,屏幕会冻结250毫秒的列表项,然后视图会随着标准缩放动画而更改,但它会缩放到一个已经填充的视图中。它看起来好多了,但我屏蔽了UI线程,这并不理想。

当新视图还没有准备好时,实现良好过渡的最佳方式是什么?

要么放置一个progress dialog用于加载数据任务,如果不放置,则。。

您可以使用AsyncTaskonProgressUpdate()方法将结果数据从数据库间歇性更新到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 databaseLIMITOFFSET子句从数据库中提取数据,并在您的select query中绑定返回结果数,以从数据库中获取大量数据。。

示例:

Select * from Animals LIMIT 100 OFFSET 50 

最新更新