从 Sqlite 游标创建 Pojo 类花费了太多时间
Posted
技术标签:
【中文标题】从 Sqlite 游标创建 Pojo 类花费了太多时间【英文标题】:Pojo class creation from Sqlite cursor is taking too much time 【发布时间】:2016-08-12 18:13:57 【问题描述】:我的查询执行时间
谢谢
【问题讨论】:
我认为您可以使用 postDelayed 处理程序来改变执行时间 你可以使用 CursorLoader。 我已经尝试过您建议的解决方案。但我仍然在日志中看到相同的消息(即应用程序在主线程中做了太多工作)。得到结果后,我正在更新适配器。我的意思是我将所有项目添加到适配器中使用的 Arraylist,并且我在 runOnUiThread 中调用 notifydataSetChanged() 方法。如果我不调用此方法,我不会在日志中看到任何消息。我也尝试过 notifyItemInserted() 但结果相同。 notifyDatasetChanged 方法应该在主线程中调用吧? 【参考方案1】:您要实例化多少个对象? 36场没看到太多。
如果你有很多对象,你可以在一个单独的线程中实例化它们。当然,您必须设置某种回调来找出所有内容何时加载
【讨论】:
【参考方案2】:我知道c.getColumnIndex()
方法需要更多时间。我知道加快速度的最佳方法如下:
Cursor c = null;
try
c = db.query(......);
if(c != null)
int channelIdIndex = c.getColumnIndex(OptimizedMessage.CHANNEL_ID);
int clientIdIndex = c.getColumnIndex(OptimizedMessage.CLIENT_ID);
while (c.moveToNext())
OptimizedMessage newMessage = new OptimizedMessage();
newMessage.setChannelId(c.getLong(channelIdIndex));
newMessage.setClientId(c.getLong(clientIdIndex));
messages.add(newMessage);
finally
if (c != null)
c.close();
可以看到c.getColumnIndex()
方法只使用了一次。
【讨论】:
我已经尝试了您建议的解决方案。但我仍然在日志中看到相同的消息(即应用程序在主线程中做了太多工作)。得到结果后,我正在更新适配器。我的意思是我将所有项目添加到适配器中使用的 Arraylist,并且我在 runOnUiThread 中调用 notifydataSetChanged() 方法。如果我不调用此方法,我不会在日志中看到任何消息。我也尝试过 notifyItemInserted() 但结果相同。 notifyDatasetChanged 方法应该在主线程中调用吧? 是的,但我认为您的问题不在于 POJO 创建。这是另外一回事。请尝试使用自定义加载器,您可以在后台线程中构建所有内容并在适配器端使用 ViewHolder 模式。这是推荐的方式。以上是关于从 Sqlite 游标创建 Pojo 类花费了太多时间的主要内容,如果未能解决你的问题,请参考以下文章
BLE 在将数据从 iOS 7.1 发送到 iOS 8 时花费了太多时间
Image magick:在 linux 服务器上花费了太多时间