android 中关于 fragment 生命周期的疑问

2014-12-18 16:28:13 +08:00
 Registering
遇到一个问题

我用handler 和 thread的方式进行网络交互

在thread中启动一个DialogFragment并进行网络访问

获取到数据后handler中dismiss()掉DialogFragment,并刷新界面

这一切都很正常,也没出现问题。

但是,当我将app返回到手机主屏幕,在dismiss时,发生一个错误

Can not perform this action after onSaveInstanceState


求解,,,
4167 次点击
所在节点    程序员
10 条回复
pubby
2014-12-18 16:59:43 +08:00
onDestroy() 中cancel掉所有网络请求,并且dismiss 打开的Dialog ?
keithellis
2014-12-18 22:15:09 +08:00
不要用 DialogFragment,因为返回主屏幕 activity 可能已经被 destroy 了。
Registering
2014-12-19 09:10:23 +08:00
@keithellis 那么问题来了,一般写个缓冲界面,你用什么?在顶层放一层view?
keithellis
2014-12-19 09:31:23 +08:00
benjiaminlam
2014-12-19 09:34:04 +08:00
在onPostResume()后显示dialog fragment
或者就不要用dialog fragment
DouO
2014-12-19 09:53:47 +08:00
在 stateSaved 之后,就不要更改 fragment 的状态了,你可以参考下这个 [gist](https://gist.github.com/douo/7820956),还有这篇[文章]( http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html)
Registering
2014-12-19 11:03:43 +08:00
@keithellis 我的情景是上传文件,,,似乎这篇文章不对应,,,这样的提醒方式适合用于下载
Registering
2014-12-19 11:04:31 +08:00
@benjiaminlam @keithellis 准备用微信朋友圈发送的方式,,,发送时不给出提醒,失败时给出一个提醒。
s1rius
2014-12-20 12:05:44 +08:00
可以看看这个库的思路和实现 https://github.com/s1rius/FragmentHandlerDemo
Registering
2014-12-20 13:00:59 +08:00
@DouO @benjiaminlam @keithellis @pubby @s1rius 解决了,很容易,在handler里面,不要用dismiss,改为i用dismissAllowingStateLoss()

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/154893

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX