处理方向变化的最佳实践:Android
我正在通过各种实践来处理线程和异步任务的方向变化。我遇到了以下解决方案:处理方向变化的最佳实践:Android,android,multithreading,orientation,fragment,Android,Multithreading,Orientation,Fragment,我正在通过各种实践来处理线程和异步任务的方向变化。我遇到了以下解决方案: 附加分离模型:将活动附加和分离到线程和异步任务,同时保留其实例。(来源:,) 无头片段方式:使用非UI/无头片段执行所有与线程相关的操作,并在配置更改时保留其实例。(来源:,) 有没有其他方法来处理这种情况?推荐的做法是什么?我问这个是因为我在Android文档中找不到通用的解决方案 您可以尝试以下方法: 1) 如果您的应用程序不明确要求任何方向更改,只需在应用程序执行开始时禁用方向更改,这样您就可以避免与方向更改有关的任
有没有其他方法来处理这种情况?推荐的做法是什么?我问这个是因为我在Android文档中找不到通用的解决方案 您可以尝试以下方法: 1) 如果您的应用程序不明确要求任何方向更改,只需在应用程序执行开始时禁用方向更改,这样您就可以避免与方向更改有关的任何崩溃或相关问题 您可以在布局xml文件的最外层布局中使用以下行执行此操作:
android:orientation="vertical"
(用于设置垂直方向)
2) 您可以在线程执行开始时使用Asynctask设置或保留以前的方向值,如下所示(仅语法示例):
及
除了异步任务之外,还有很多方法可以尝试。如果您试图找到最佳实践,AsyncTask不是一个好的选择。解释为什么不应使用AsyncTask。他们建议您使用更好的方法来处理长时间运行的任务
我已经使用过这个库,我认为它值得尝试:尊重活动生命周期(方向更改),无内存泄漏,支持多线程,缓存结果。。。它可以通过使用缓存来插入和拔出长请求任务(但对于非缓存请求,它不能很好地工作) 但我推荐一种来自谷歌的好方法:
IntentService
和BroadcastReceiver
。您将在方向更改期间注册和取消注册广播以接收数据结果。所有后台任务都将在IntentService中工作,并通过BroadcastReceiver通知您想要的任何活动。有很多例子可以尝试。大概是这样的:
更新:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
嗨,R4j,关键是我的应用程序非常复杂。我必须做些什么 并行网络呼叫数。您使用IntentService的方法是 很好,但不适用于复杂场景 我不认为这是个问题。你可以用IntentService做任何事情,甚至是复杂的任务。如果需要并行任务,可以考虑多线程的服务,并通过意图与活动进行通信。在服务和活动之间发送意图是安全和灵活的,这是Android的方式。
如果您想缓存(通过文件下载、流媒体、数据库…)
RoboSpice
是您的最佳选择为什么不试试,尤其是AsyncTaskLoader
?它们可用于蜂窝状结构之前的整个生命周期,并与活动/片段生命周期完美匹配。以下是官方摘要:
- 它们适用于所有活动和片段
- 它们提供数据的异步加载
- 他们监控数据的来源,并在内容发生变化时提供新的结果
- 在配置更改后重新创建时,它们会自动重新连接到最后一个加载程序的光标。因此,他们不需要重新查询数据
如果处理异步任务是您主要关心的问题,即不愿意在每次方向更改时下载数据,那么您可以这样尝试-- (1) 在像这样创建之前初始化任何值
Boolean android_hacker = false;
(2) 现在,在AsyncTask类上下载完数据后,将该值设置为true
android_hacker = true;
这里使用模型和阵列适配器类维护所有数据
(3) 现在每次方向改变,然后像这样检查
if( android_hacker = true ){
// Use your saved instance ..
}else{
// Download data as it is yet not downloaded ..
}
希望对您有所帮助。一些总结
上面提到的几种方法都是很好的实践,但我想我可以用简短的解释来总结它们。下面是目前用于http网络、异步工作/线程和缓存的一些最流行的库
我当前的项目(只是偏好)
我个人目前正在使用奥托、加载器、截击、奥姆莱特,以及基于Apache和服务
的网络堆栈。我确实希望在某个时候用截击,改装,或者最终用机器人世界来替换网络堆栈
我个人非常喜欢奥托和截击
机器人空间(模块化)
- 长时间运行任务的插件/模块化方法
- 这就像是库中的“瑞士军刀”,但您需要知道每个工具的作用
- 处理REST呼叫
- 通过方向和其他更改保持数据
- 可以处理磁盘和内存缓存)
- 使用各种HTTP库和持久性库(Gson、Jackson、Spring和以下许多库)
- 我想是beta版的支持
- 注释库使REST变得非常简单。与机器人世界合作
- 这是运行Google Play商店的网络代码
- 快速、可靠
- 使用一些合理的默认值为您处理大多数缓存
- 非常容易使用
- 专为非常快速的图像、json等加载而构建
- 为您处理所有线程
if( android_hacker = true ){ // Use your saved instance .. }else{ // Download data as it is yet not downloaded .. }