处理方向更改的最佳做法:Android

Gau*_*ora 33 multithreading android fragment orientation

我正在通过各种实践来处理线程和AsyncTask的方向更改.我遇到了以下解决方案:

  1. Attach-detach模型:在保留实例的同时为线程和AsyncTask附加和分离活动.(来源:1,2)

  2. 无头片段方式:使用非UI /无头片段执行所有与线程相关的操作,并在配置更改时保留其实例.(来源:1,2)

有没有其他方法来处理这种情况?建议的做法是什么?我问这个是因为我在Android文档的任何地方都找不到通用的解决方案.

pjc*_*jco 43

一些摘要

上面提到的几种方法都是很好的做法,但我想我可以用简短的解释来总结它们.下面是目前用于http网络,异步工作/线程和缓存的一些最流行的库.

我目前的项目(只是偏好)

我个人目前正在使用Otto,Loaders,Volley,Ormlite以及基于ApacheServices 的网络堆栈.我确实希望用Volley,Retrofit和最终的Robospice取代网络堆栈.

个人非常喜欢奥托和凌空


RoboSpice(模块化)

改造(REST)

Volley(网络数据和图像)

毕加索(图片集)

装载机(Android)

  • 很好的支持
  • 通过方向更改和片段状态的保存/加载来保持
  • 可能很难做对
  • 没有缓存

AsyncTask(Android)

  • UI线程的后台工作的简单方法
  • 必须取消并注意在活动或片段被拆除后返回的任务.

奥托(活动巴士)

  • https://github.com/square/otto
  • 事件总线使组件和片段之间的同步工作变得容易
  • 非常强大的@Produce能力保留了最后一个事件,并且可以根据需要为任何新的感兴趣的公共汽车订户生成它

无头碎片(?)

  • 我个人从未见过除了Vogella教程之外的其他内容,所以我不确定这个.

服务(Android)

  • 老派的方式
  • 终极控制,你必须自己做所有事情
  • 通常与Appache或HURL客户端一起使用
  • 通过Intents传递Parcels


a.c*_*ch. 7

Loaders特别是你为什么不试试AsyncTaskLoader?它们可通过支持库提供给Honeycomb之前,并完美匹配活动/片段生命周期.这是官方摘要:

  • 它们适用于每个Activity和Fragment.
  • 它们提供异步数据加载.
  • 他们监控数据来源,并在内容发生变化时提供新结果.
  • 在配置更改后重新创建时,它们会自动重新连接到最后一个加载器的光标.因此,他们不需要重新查询他们的数据.