如何避免在配置更改时停止服务?

问题描述 投票:1回答:3

嗨,谢谢你的帮助。

我有以下情况。

我的Activity绑定到一个服务,该服务通过AsyncTask从Internet执行大量数据检索。

由于服务很重,我需要确保在用户导航活动时停止服务,因此我确保在onDestroy()停止服务。

当配置更改onDestroy()被调用时 - onPause()onStop()-也随后服务被onDestroy()停止。

关键是我不希望服务停止配置更改。

请非常感谢任何建议!

谢谢你的帮助!

android service configuration ondestroy
3个回答
3
投票

你可以在API等级11及以上的isChangingConfigurations()中调用onDestroy()。你可以参考这篇文章,How to distinguish if activity is changing configurations

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


0
投票

我可以为你的问题提出两点建议。

1)在Manifest文件中的活动(Yes Activity not service)声明中使用以下标记,这将基本上避免在方向更改时重新创建Activity。因此不会调用onDestroy。

android:configChanges="keyboardHidden|orientation"

2)您可以在活动中使用以下方法终止/停止您的服务,只有在用户想要离开您的活动时才会调用该服务。当你开始另一项活动时,你也应该停止服务。

 @Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();
}

0
投票

试试这个:

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

将此属性应用于manifest文件。

简短说明:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.