我正在开发一个应用,其中我在一个Fragment
中托管了两个Activity
。活动布局有一个底栏,其中有按钮可以切换两个片段。
在这些片段中,Thread
可以进行一些互联网工作,然后更新它们的布局。
Hieararchy:
Activity
Fragment
1
Thread
1 Fragment
2
Thread
2 问题
问题在于,当Thread
1开始做一些工作时,用户点击按钮切换到Fragment
2,Thread
继续在后台运行,当完成它的网络任务并尝试更新视图(在现在不可见的Fragment
1中)时,应用程序崩溃,因为getActivity()
或getContext()
现在返回{ {1}}。
编辑:该主题使用了null
和getActivity()
,不仅用于更新布局,还用于保存getContext()
等。 我可以向使用SharedPreferences
的每一行添加一个检查(例如if(!stopped)
),但我认为有一种更好的方法,而不是包含if条件中的每一步。
那么如何彻底杀死Context
或Thread
?当片段被切换时,我不需要运行后台工作,我只需要在片段可见时运行它。
我已尝试使用Fragment
并使用Thread.interrupt()
删除片段(而非替换)。没用。
提前致谢:)
答案 0 :(得分:0)
您可以在线程中检查getActivity()
是否为空,在这种情况下不执行UI更新。一旦用户切换到另一个片段,更好的方法是停止下载 - 如何操作取决于您使用的HTTP客户端。使用HttpURLConnection
,只需拨打disconnect()
即可。
而不是使用Thread考虑使用支持被取消的AsyncTask。例如搜索SO,这里是一个:Ideal way to cancel an executing AsyncTask。