我的应用程序中存在多线程问题。我知道在Threads / AsyncTasks / etc上有很多帖子,但似乎都没有解决我的具体问题。
基本上,我在搜索Activity中获取了一个查询字符串,然后将其发送到我的结果Activity,其中该字符串用作SQL查询,结果作为JSON对象数组返回,然后我显示这些对象一个ListView(它是结果Activity的一部分)。我所有的SQL连接和检索都是在一个单独的类中完成的,我在结果Activity的开头调用它。
MySQLRetrieve data = new MySQLRetrieve();
ArrayList<Tile> tiles = data.getResults(nameValuePairs, isLocationSearch);
上面的代码是我如何获取SQL响应并转换为ArrayList,然后我使用填充我的ListView。 getResults()负责所有这些。
我已经有单独的线程工作将图像下载到ListView中,但我无法工作的是获取SQL查询并将结果运行在它自己的Thread中。我想要实现的是:
我的步骤1,2和4运行良好,但问题是3。我已经查找了AsyncTasks,这似乎是答案,但我无法让它们工作。有没有人有这个问题的解决方案?我需要这样做,所以在启动结果Activity时,UI会立即更改为结果Activity,而不必等到返回SQL响应。
是的,我已经阅读了无痛线程帖子。
谢谢。
答案 0 :(得分:2)
我建议不要创建ArrayList<Tile>
以减少内存消耗(和代码大小),而是使用Cursor
直接将SQLite ListView
绑定到CursorAdapter
。< / p>
仅此一项可能只会提高性能,因此您无需进行任何异步加载。
如果您仍想要异步加载,请查看LoaderManager
framework(自Android 3.0 / API级别11以来可用,Android support package降至1.6 / 4),这将自动执行{{{{ 1}} - 要么使用内置CursorLoader
(如果碰巧有Cursor
),要么使用由SO用户创建的SimpleCursorLoader
(如果不这样做)