我在想什么时候或是否可以使用光标从UI线程获取SQLite数据库中的数据。基本上,我使用CursorLoader来获取游标,然后我想对该游标进行一些操作。从主UI线程操作游标是否正确?实际上,我只需要读取游标中的一行。
Cursor
中检索一行并不是一个昂贵的操作...另一方面,从数据库查询数据可能会非常耗时,这取决于您请求的数据量和/或查询的复杂性。 CursorLoader
异步查询 Cursor
,因此您的方法是可行的。没问题。这不是一个网络操作。
编辑:我所说的“没问题”是指Android 4.x不会因为在主线程上执行此操作而强制关闭您的应用程序,就像执行网络I/O一样。根据查询时间,将UI线程停顿可能适合或不适合。对于“通过其主键从单个表中获取单个行”的查询,这是完全可以的。对于需要一秒钟或更长时间的复杂查询,请考虑使用后台线程和进度对话框。
NetworkOnMainThreadException
不需要担心。 - Seva AlekseyevSharedPreferences
很容易检索,而且在UI线程上执行也没问题。但最好异步地写入SharedPreferences
。自API 9以来,Android SDK提供了可以这样做的方法(Editor#commit
)。您还可以使用Mark Murphy(CommonsWare)的SharedPreferenceLoader
here。就像您所说,“查询单个行”是可以的,但很多时候您不想冒险,因为即使停顿几百分之一秒也会降低用户体验。 - Alex Lockwood