4

我正在开发一个 Android 应用程序,我必须从 Android 数据库加载大量数据并在屏幕上查看它。

在开发的早期阶段,我曾经在 OnCreate() 方法中从 DB 中检索数据,当数据变得庞大时,它确实减慢了活动的开始。所以我在 OnResume() 方法中调用了数据检索并在屏幕上查看它,这样我的应用程序在加载时间过长时不会崩溃。我知道在 OnResume 完成之前不会显示活动。

那么在 OnResume 中调用耗时操作而不是在 OnCreate() 方法中进行所有初始化是一种好方法吗?

4

2 回答 2

3

那么在 OnResume 中调用耗时操作而不是在 OnCreate() 方法中进行所有初始化是一种好方法吗?

不 - 您不应该在 OnCreate 或 OnResume 中执行此操作。您应该始终在工作线程中执行此操作 - 例如 AsyncTask。

任何需要很长时间才能完成的操作,如果在 UI 线程上执行将阻塞消息队列 - 这意味着没有重新绘制 UI 小部件,用户无法点击您的应用程序执行任何操作。一切都被阻止,直到您的操作完成。约 5 秒后,Android 生成 ANR(应用程序没有响应)并终止您的应用程序。

于 2015-12-26T09:53:10.160 回答
1

你不应该在主线程上做 IO 操作。这包括onCreateonResume方法,它们将始终在主线程上调用。

要正确加载数据,您应该使用AsyncTaskContentLoader及其回调。

一般来说,要在应用程序中使用数据库,您应该使用 aContentProviderCursorLoaders。有很多关于如何使用这些的教程,它使您的代码更易于管理。

于 2015-12-26T09:57:01.787 回答