嗨,谢谢你的帮助。
我有以下情况。
我的Activity绑定到一个服务,该服务通过AsyncTask从Internet执行大量数据检索。
由于服务很重,我需要确保在用户导航活动时停止服务,因此我确保在onDestroy()
停止服务。
当配置更改onDestroy()
被调用时 - onPause()
和onStop()
-也随后服务被onDestroy()
停止。
关键是我不希望服务停止配置更改。
请非常感谢任何建议!
谢谢你的帮助!
你可以在API等级11及以上的isChangingConfigurations()
中调用onDestroy()
。你可以参考这篇文章,How to distinguish if activity is changing configurations。
也许你应该采取另一种方法。我认为你应该使用IntentService
(在后台运行,不再需要AsyncTask
),使用该服务来检索和存储数据,然后使用Activities
通知Broadcast
数据已更新。
我可以为你的问题提出两点建议。
1)在Manifest文件中的活动(Yes Activity not service)声明中使用以下标记,这将基本上避免在方向更改时重新创建Activity。因此不会调用onDestroy。
android:configChanges="keyboardHidden|orientation"
2)您可以在活动中使用以下方法终止/停止您的服务,只有在用户想要离开您的活动时才会调用该服务。当你开始另一项活动时,你也应该停止服务。
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();
}
试试这个:
<service android:name=".yourService"
android:configChanges="keyboardHidden|orientation"></service>
将此属性应用于manifest
文件。
简短说明:
默认情况下,当Android上发生某些键配置更改时(常见的示例是方向更改),Android会完全重新启动正在运行的活动/服务,以帮助它适应此类更改。
当你在你的android:configChanges="keyboardHidden|orientation"
中定义AndroidManifest
时,你会告诉Android:“当拔出键盘或手机旋转时,请不要进行默认重设;我想自己处理。是的,我知道我是什么做”。