当活动被销毁但我必须继续在片段中执行代码时该怎么办?

时间:2017-05-29 10:37:00

标签: android android-fragments android-activity nullpointerexception

我这里有一个非常奇怪的问题。在片段中,我执行一个过程,当过程结束时,我会在用户点击/取消广告时显示回调片段的广告。问题是,在某些设备中,当广告回调给处理程序(即在运行的片段中)时,包含该片段的活动已被破坏,但我需要通过runnable做更多的工作。因此,在这种情况下,runnable会在执行时抛出NullPointerException int is run方法。

我可以检查活动是否仍然存在并且只运行runnable,但是如果它还没有存活,我仍然需要继续完成广告后需要完成的部分工作

你如何处理这种情况?我在几个小时内一直在考虑这个问题而没有找到解决方案。

提前致谢。

2 个答案:

答案 0 :(得分:1)

在这种情况下,您可以使用AsyncTask。

AsyncTask 进程不会被操作系统自动杀死。 AsyncTask进程在后台运行,并负责在任何情况下完成自己的工作。您可以通过调用cancel(true)方法取消AsycnTask。这将导致后续调用isCancelled()返回true。在调用此方法之后,在doInBackground()返回后调用onCancelled(Object)方法而不是onPostExecute()。

希望有所帮助......

答案 1 :(得分:0)

mmm问这个问题的方式我不确定你在问什么,也许有些文字连接器可能有效,我不确定这是一个关于状态变化的非常基本的问题,还是一个非常复杂的问题。

根据我的理解:

这与翻转屏幕时的问题不一样吗?制作通过活动更改恢复的数据的捆绑。这样,如果您的活动已被销毁,则将其恢复

片段具有一项功能,您可以使用该功能在配置更改中保持实例活动:retainInstance setRetainInstance(true)//默认为false

像Serializable一样可分割,是一个用于将对象保存到字节流的API。对象可以选择实现Parcelable接口,如果它们是我们将要调用的" stashable"这里。通过将对象置于Bundle中,或者通过将它们标记为Serializable以便对它们进行序列化,或者通过实现Parcelable接口,将对象存储在Java中。无论你采用哪种方式,同样的想法都适用:你不应该使用任何这些工具,除非你的对象是可以存储的 --- ---或

转过来"广告"你的警报,不会搞乱活动。

--- ---或

在另一个线程上运行响应?