【问题标题】:Best way to start an application efficiently高效启动应用程序的最佳方式
【发布时间】:2013-10-09 20:13:29
【问题描述】:

这是问题,我想知道启动需要的Android应用程序的最有效方法是什么:

1- xml/json 流与 WebServices 一起下载(文本、图像 url、dataq、...)

2-数据保存在sqlite中,然后加载到应用程序中使用(数据来自1-)

3- 保存在 SharedPreference 中的数据也已加载以在应用程序中使用(一些用户输入)

4-要从url下载的图片(urls from 1-)

我需要一个很好的方法来启动一个具有所有约束(从 web 服务加载数据、sqlite 插入/更新等)的应用程序,但要尽可能快地启动应用程序并加载数据必须有效。

【问题讨论】:

  • 这个(should data be loaded at start up ? how ? sqlite after that ? .. etc)看不懂,能详细解释一下吗?
  • 这些点是否在没有用户输入(按钮单击等)的情况下开始?
  • 我需要建议来重新思考我的创业方式。这不是来自用户输入,而是“来自应用程序启动”。用户启动应用程序之后,所有事情都必须完成以加载数据、存储数据并以对用户尽可能透明的方式显示它们。也是最快的

标签: java android json sqlite android-volley


【解决方案1】:

好问题! 我会用一个很棒的库列表来回答。 首先你应该看看AndroidAnnotations 这将真正简化您的工作。不要害怕注释上的性能。这不是反射,而是编译步骤。它确实简化了共享偏好的使用。 对于 http 的东西,spring 非常好,并且与 android 注释很好地集成在一起。 我从未在 WS 中使用过 xml,但对于 json 映射,我使用的是 Jackson,它非常快速且灵活。我认为 gson 也做得很好。

对于图像加载,UIL 是最有效和最成熟的(所以,我在 7 月份进行基准测试时就是这种情况,Picasso 和 Volley 也是如此)。

目前我还没有找到 ORM saint graal,但我的建议是“你真的需要数据库吗?”如果您有疑问退避。如果你需要它,ormlite 有一些性能问题。在我的下一个项目中,我将尝试使用 greenDao。

明确地为 ListView+ SQLite 使用 CursorAdapter,而不是在 Listview 中加载。但请确保不要同时密集访问数据库(WS 写入)。

如果您需要传递诸如“嘿,数据库刷新中有新数据可用”之类的事件,请不要制作样板接口。使用事件总线这太棒了EventBus

【讨论】:

  • 只是开玩笑,但这是一个非常好的建议。启动应用程序的最佳方式无疑是使用纸和铅笔。
  • 这也是一些很棒的建议。是的,我需要一个数据库,因为需要从 JSON WebService 加载大量数据。我会看看那些库、注释和事件总线!在您看来,如果我使用这么多库,我的应用程序将来是否存在无法维护的风险?
  • 是的,对于长期项目,你是绝对正确的。但是一个应用程序是否可以持续 10 年而无需完全重新考虑?相反,我认为这将简化应用程序生命周期的维护。我在有无维护的情况下进行了测试,最终,它更容易开发和维护/发展。但我完全理解你的疑虑。
【解决方案2】:

我会说,在纯粹的速度上,这是顺序; SharedPref - SQLite - xml/json。

建立网络连接总是比在机器本身上进行本地操作要慢。即使条件不完美,也无法保证完美的移动互联网和服务器性能。之后,你仍然需要解析它。

SharedPreferences 不是为了保存整个数据结构而设计的,只是为了简单的事情,比如你想保留一段时间的小设置。

您想要对数据执行的操作是从服务器加载一次。最好不要显示加载屏幕等。将其保存到 SQLite 数据库中。 在下次启动时,您可以(几乎)立即显示数据库中的数据,并在后台从 Web 服务更新以保持最新状态。

【讨论】:

  • 我明白你的观点。这说得通。 Volley 是从 JSON 加载数据的好解决方案吗?除了 Volley 之外,UIL 是不是一个很好的解决方案(用于大量图像加载)
  • 我从未使用过 Volley,但据我所知,它是 Google 自己提供的库,所以应该不错:) Universal Image Loader 是另一个我从未亲自使用过的库,但很多人们这样做我猜它很好。我亲自尝试过 Jake Wharton 的 Picasso,效果很好。 corner.squareup.com/2013/05/picasso-one-dot-oh.html 只需将图像 URL 放入您的 json 中,将它们保存到数据库中,并在需要时让 Picasso 为您加载它们。它会自动缓存它们等。
  • 很好,谢谢,我会试一试。在结束问题之前,我仍然需要一些关于 SQLITE 的建议。对于 SQLITE + ListView 你会怎么做?在将列表传递给适配器之前加载数据?或者也许使用 CursorAdapter ?您认为从 SQLITE 数据库加载列表视图的最佳方式是什么?
  • 我真的不认为这很重要,这是您认为最方便的偏好问题。我猜想使用 Cursor 可以避免将数据传递到另一个列表中产生一些开销,但是对于普通数据集,这种差异是可以忽略的。我相信用谷歌搜索它会给你一个完整的列表,列出双方的优缺点:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-08
  • 2011-09-10
相关资源
最近更新 更多