2013-05-26 46 views
0

我已经阅读了几篇关于android中后台进程的文章。 但我有背景操作需要超过30秒的情况;例如:Runnable或意图服务

  • 开始活动
  • 点击按钮
  • 创建可运行,呼叫服务器的一些数据
    为30秒(请稍候消息)
  • 完成,发送消息到处理器
  • 屏幕方向发生在30秒的中间...

我知道活动被销毁并被重新创建(同时线程内的线程已经被删除(使其成为静态的,因为潜在的内存泄漏而导致的处理程序)。
所以,我将需要创建可运行,并再次调用服务器....

我读到intentService,据我所知,intentservice生命周期是相同的应用程序,所以我想我需要使用呢?

在这30秒的downloading/parsing/insertingdb(交易)之间处理屏幕方向的最佳做法是什么? - >我不想使用onConfigurationChanged()方法。

这些问题的解决方案是什么?

Thnx。

回答

1

与其将您的后台操作与活动关联起来,我建议您实施application object。只有应用程序对象与任何特定的应用程序相关联,并且它在任何Activity对象之前创建,并且独立于应用程序生命周期期间创建/销毁的任何活动对象。我有一个应用程序,让我的所有活动对象向自己的应用程序对象注册。如果您做了类似的事情,那么由于配置更改而导致任何特定活动被破坏并重新创建都无所谓。

0

您可以使用服务,但我认为更好的解决方案将有静态模型类,将由静态处理程序更新将执行该工作。当发生定向时,活动可能会死亡,但不是应用程序。顺便说一句,你可以添加这些线条来体现你的活动不会死:

<activity 
     android:label="@string/app_name" 
     android:name=".Counter_demoActivity" 
     android:configChanges="keyboardHidden|orientation|keyboard" > 

但是如果你不这样做,你的活动是死亡和重新启动,你可以通过阅读静态模型类

更新您的状态
+0

嗯,你的意思是让静态类做后台工作?是不是像IntentService类似的解决方案? – User1980

+0

@Oggie当然不是,IntentService是服务,所以他有服务生命周期。不适用。您可以说服务受到应用程序生命周期的限制,但并不总是正确的。 –

0

JobScheduler(minSdkVersion = 21 +)是可运行或意向服务的可靠替代方案。它具有内置的重试逻辑,并且不受Android O的服务背景限制。