上述提到的几种方法都是良好的实践方法,但我认为可以通过简短的解释来概括它们。以下是目前用于http网络、异步工作/线程和缓存的最流行的库。
我个人目前正在使用Otto、Loaders、Volley、Ormlite以及基于Apache和Service
的网络栈。我希望在某个时候能够用Volley、Retrofit或者最终用Robospice替换网络栈。
我个人非常喜欢Otto和Volley。
@Produce
功能可以保留最后一个事件,并能够按需为总线上任何新的感兴趣的订阅者生成它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 ..
}
除了AsyncTask之外,还有很多尝试的方法。如果您想找到最佳实践,AsyncTask不是一个好选择。 这个答案 解释了为什么不应该使用AsyncTask,并建议您使用一种更好的方式来处理长时间运行的任务,RoboSpice。
我已经使用过这个库,我认为它值得一试:尊重活动的生命周期(方向更改),没有内存泄漏,支持多线程,缓存结果... 它可以通过使用缓存插入和拔出长请求任务(但对于非缓存请求效果不佳)。
IntentService
和BroadcastReceiver
。您可以在方向更改期间注册和取消注册广播以接收数据结果。所有后台任务将在IntentService中工作,并通过BroadcastReceiver通知您想要的活动。有很多示例供您尝试。类似于这样:http://mobile.tutsplus.com/tutorials/android/android-fundamentals-intentservice-basics/
更新:RoboSpice
是您的最佳选择。Service
处理多个线程,IntentService
是一种专门为你创建了单个后台工作线程的特殊Service
。 - pjcoIntentService
(例如在 onHandleIntent
中创建新线程),以接收和执行从活动发送的许多任务。 - ductranIntentService
中创建线程不是一个好主意。onHandleIntent
已经从IntentService创建的工作线程中调用。onHandleIntent
创建了一个顺序阻塞工作队列。如果你需要两个后台工作线程,使用IntentService将创建3个线程,并使你处于不稳定的状态,无法确定这些线程何时存活。IntentService
非常好用,但是将其用于启动线程会超出其预期功能范围。如果你需要这种并发性,应该使用带有ThreadPoolExecutor
的常规服务。 - pjco android:orientation="vertical"
(用于设置垂直方向)
2)您可以使用Asynctask在线程执行开始时设置或保留以前的方向值,如下所示(仅为语法示例):
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
和
getResources().getConfiguration().orientation
gauravsapiens
所想要的方向更改。附注:我没有进行反对投票。 - ductran