当我在developer.android.com上研究方法getWriteableDatabase()
时,他们说了以下内容:
“您不应该从应用程序主线程中调用此方法”
他们似乎没有说明为什么不应该从应用程序主线程调用getWriteableDatabase()
。有人可以向我解释原因吗?
答案 0 :(得分:3)
长操作应该在主线程(也就是UI线程)上调用 NEVER ,因为它会锁定应用程序的响应能力。
主线程负责处理用户输入和所有屏幕绘图。因此,如果一项操作花费的时间过长,您的应用程序将被冻结,直至完成,对于用户来说,您的应用程序似乎已崩溃。
来自Udacity的This video解释得非常好。
您可以在Android here上详细了解Thread
。
答案 1 :(得分:1)
getWriteableDatabase()
将始终执行一些磁盘I / O,甚至可能在主应用程序线程上尽可能避免一些磁盘I / O.
但是,如果getWriteableDatabase()
触发了对您onCreate()
的{{1}}或onUpgrade()
的调用,则可以执行批次的磁盘I / O ,你真的需要在后台线程上做这项工作。请记住,当您占用主应用程序线程时,您的UI会被冻结。