0

我已经阅读了几篇关于 android 后台进程的文章。但我有后台操作需要超过 30 秒的情况;例子:

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

我知道活动被破坏并重新创建(其中的线程也被破坏(使其成为静态的,由于潜在的内存泄漏,处理程序)。
所以,我需要创建可运行并再次调用服务器......

我阅读了有关 intentService 的信息,并且我了解 intentservice 生命周期与应用程序的生命周期相同,所以我假设我需要使用它?

在这 30 秒downloading/parsing/inserting进入db(事务)之间处理屏幕方向的最佳做法是什么?-> 我不想使用 onConfigurationChanged() 方法。

对于此类问题,您有什么解决方案?

谢谢。

4

3 回答 3

1

我建议您实现一个应用程序对象,而不是将您的后台操作与一个活动相关联。只能有一个应用程序对象与任何特定的应用程序关联,并且它在任何 Activity 对象之前创建,并且独立于在应用程序的生命周期内创建/销毁的任何 Activity 对象。我有一个应用程序,我可以在其中让所有活动对象注册到我的应用程序对象中。如果您执行类似的操作,那么任何特定活动是否因配置更改而被破坏和重新创建都无关紧要。

于 2013-05-26T12:27:04.987 回答
0

您可以为此使用服务,但我认为更好的解决方案是拥有静态模型类,该类将由静态处理程序更新,该处理程序将完成工作。当方向发生时,活动可能会消失,但应用程序不会。顺便说一句,您可以将这些行添加到清单中,并且您的活动不会消失:

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

但是如果你不这样做并且你的活动正在死亡并重新启动,你可以通过阅读静态模型类来更新你的状态

于 2013-05-26T12:56:48.907 回答
0

JobScheduler (minSdkVersion=21+) 是可运行或 Intent 服务的强大替代方案。它内置了重试逻辑,并且不受 Android O 中服务的后台限制的影响。

于 2017-10-21T06:51:00.183 回答