我正在开发一个Android应用程序,我必须从Android数据库加载大量数据并在屏幕上查看。
在开发的早期阶段,我曾经在OnCreate()方法中从数据库中检索数据,当数据变得庞大时,它确实减慢了活动的开始。所以我调用了数据的检索并在OnResume()方法中在屏幕上查看它,这样我的应用程序就不会在加载太长时间时崩溃。 我知道直到OnResume完成才会显示活动。
那么在OnResume中调用操作时间而不是在OnCreate()方法中进行所有初始化是一种很好的方法吗?
答案 0 :(得分:3)
因此,在OnResume中调用操作时间而不是在OnCreate()方法中进行所有初始化是一种很好的方法吗?
不 - 您不应该在OnCreate或OnResume中执行此操作。你应该总是在工作线程中做 - 比如AsyncTask。
任何需要很长时间才能完成的操作,如果在UI线程上执行将阻止消息队列 - 这意味着没有重新绘制UI小部件,用户无法点击您的应用程序来执行任何操作。一切都被阻止,直到您的操作完成。在~5s之后,Android会生成ANR(应用程序没有响应)并杀死你的应用程序。
答案 1 :(得分:1)
您永远不应该在主线程上执行IO操作。这包括onCreate
和onResume
方法,这些方法将始终在主线程上调用。
要正确加载数据,您应该使用 AsyncTask 或 ContentLoader 及其回调。
一般来说,要在您的应用程序中使用数据库,您应该使用ContentProvider
和CursorLoader
。有很多关于如何使用它们的教程,它使您的代码更易于管理。