Android 避免应用程序尝试调用片段';当应用程序被终止时,它的构造函数为空

Android 避免应用程序尝试调用片段';当应用程序被终止时,它的构造函数为空,android,android-activity,android-fragments,Android,Android Activity,Android Fragments,当活动启动时,是否有方法识别应用程序是否已被终止(例如,由于内存不足),然后避免应用程序尝试使用其空构造函数加载其以前的片段 我需要具有非空构造函数的片段,并且它们的参数不可序列化(当应用程序在后台运行时,我无法保存它们)。如果应用程序被杀死,我想自己重新创建它,再次创建所有片段,就像应用程序第一次启动一样 有可能吗?我不知道有什么方法可以阻止某个活动重新创建其片段。这并不是说没有这样的机制,但如果有这样的机制,它就不是常用的 但构造函数只是将数据导入对象的一种方式。如果您支持零参数公共构造函数

当活动启动时,是否有方法识别应用程序是否已被终止(例如,由于内存不足),然后避免应用程序尝试使用其空构造函数加载其以前的片段


我需要具有非空构造函数的片段,并且它们的参数不可序列化(当应用程序在后台运行时,我无法保存它们)。如果应用程序被杀死,我想自己重新创建它,再次创建所有片段,就像应用程序第一次启动一样


有可能吗?

我不知道有什么方法可以阻止某个活动重新创建其片段。这并不是说没有这样的机制,但如果有这样的机制,它就不是常用的

但构造函数只是将数据导入对象的一种方式。如果您支持零参数公共构造函数,因此Android可以重新创建您的片段,那么您可以:

  • 对无法放入
    savedInstanceState
    捆绑包的数据使用setter,将活动中的数据推送到活动的onCreate()中的片段中,或

  • 从片段的
    onAttach()
    onActivityCreated()
    中的宿主活动中提取数据,或

  • 在事件总线实现中为此使用特殊挂钩,例如Otto中的生产者或greenrobot的事件总线中的粘性事件,或

  • 让片段重新创建数据本身(例如,打开与服务器的新套接字连接,以替换进程终止时丢失的套接字)


可能还有其他模式,但这些模式应该可以帮助您了解如何支持零参数公共构造函数。

“我需要具有非空构造函数的片段”——为什么?对无法放入
savedInstanceState
捆绑包的数据使用setter,将活动中的数据推送到活动的
onCreate()
中的片段中。或者,从片段的
onAttach()
onActivityCreated()
中的托管活动中提取数据。太棒了!这就是解决办法!