2

Hi and thanks for your help.

I have the following situation.

My Activity is bound to a Service that performs heavy data retrival from internet via an AsyncTask.

Since the Service is heavy I need to make make sure it is stopped when the user navigates away for the Activity, therefore I make sure to stop the service in onDestroy().

When configuration changes onDestroy() is called - and so are onPause() and onStop()- and subsequently the Service is stopped by onDestroy().

The point is that I do not want the Service tho stop on configuration change.

Please any suggestion very much appreciated!

And thanks for your help!

4

3 回答 3

3

您可以调用API 级别 11 及更高级别isChangingConfigurations()onDestroy()您可以参考这篇文章,如何区分活动是否正在更改配置

也许你应该采取另一种方法。我认为您应该使用 a IntentService(在后台运行,不再需要AsyncTask),使用该服务来检索和存储数据,然后使用 a Maybe通知Activities数据已更新。Broadcast

于 2013-01-20T13:16:03.513 回答
0

对于您的问题,我可以建议两件事。

1)在清单文件中的活动(是活动不是服务)声明中使用以下标签,这将基本上避免在方向更改时重新创建活动。因此不会调用 onDestroy。

android:configChanges="keyboardHidden|orientation"

2)您可以在您的活动中以以下方法终止/停止您的服务,仅当用户想要离开您的活动时才会调用该方法。并且您还应该在开始其他活动时停止您的服务。

 @Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();
}
于 2013-01-20T13:14:27.633 回答
0

试试这个:

<service android:name=".yourService"
       android:configChanges="keyboardHidden|orientation"></service>

将此属性应用于您的manifest文件。

简短说明:

默认情况下,当 Android 上发生某些关键配置更改(常见示例是方向更改)时,Android 会完全重新启动正在运行的 Activity/Service 以帮助其适应此类更改。

当您在 中定义android:configChanges="keyboardHidden|orientation"AndroidManifest,您是在告诉 Android:“请不要在拔出键盘或旋转手机时进行默认重置;我想自己处理。是的,我知道我在做什么” .

于 2013-01-20T12:58:45.240 回答