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