从 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 时花费了太多时间

在 MySQL 中进行排序时查询花费了太多时间

Image magick:在 linux 服务器上花费了太多时间

处理存储在 RDD [String] 中的记录时,spark collect 方法花费了太多时间

嵌套的 Foreach 循环花费了太多时间

SQLite 做了太多的小尺寸磁盘读取