2011-04-21 25 views
0

在我的应用程序中,我必须连接到服务器,我在单独的线程中执行此操作,并且我希望连接保持活动状态,只要我的应用程序的活动在屏幕上可见。我也希望如果用户离开我的应用程序,线程会中断并且连接关闭。只要应用程序在屏幕上,网络线程必须存在

这里的主要问题是,如果用户旋转屏幕,当前活动就会被破坏,我无法区分这种情况与用户真正离开我的活动的情况。方法onRetainNonConfigurationInstance()不起作用,因为它在onStop()之后被调用,并且我想关闭onStop()中的连接。

我也尝试了绑定服务,但问题是完全一样的,服务在我旋转屏幕时关闭。

而我不想自己处理配置更改。

我该怎么办?

回答

0

onUserLeaveHint()方法取得了诀窍。

0

我知道它违背你不想处理配置改变自己有点您的语句,但如果添加

<activity android:name="org.example.Activity" android:configChanges="orientation|keyboardHidden"></activity> 

你的清单,生命周期方法不应该被调用。如果您不覆盖onConfigurationChanged()方法,则不需要进行特殊处理,并且所有内容都由超类来处理。

+0

是的,问题是,开发指南说这只能作为最后的手段,所以我宁愿不使用这个解决方案。 – 2011-04-21 13:53:16

+0

@Guillaume我个人认为这种情况是这样的:“_在某些特殊情况下,您可能希望绕过基于一种或多种配置更改重新启动活动。”(来自[活动生命周期文档]( http://developer.android.com/reference/android/app/Activity.html#ConfigurationChanges))但是,如果有另一个更优雅的解决方案,我想听听它,因为我面临类似的问题几次,并总是诉诸于使用上述方法。 – Stephan 2011-04-21 14:14:53

+0

我可以看到另一个解决方案,但这可能有点难看。当每个活动停止时,在线程中启动一个计时器(例如10秒),并且如果在计时器结束时每个活动仍然停止,则中断该线程。好的副作用是,它允许用户在几秒钟内退出应用程序(例如读取SMS)而无需断开连接。 – 2011-04-21 16:00:19

相关问题