有3种活动:A-> B-> C.每个包含一个Button(用于打开下一个活动)和一个EditText。
例如:如果我在C中键入一些文本并返回A(按后退按钮),我怎么能看到相同的…
只需设置你的类A的onResume()方法,调用你想要保存的Singleton类实例(或者类的Application类是相同的)
LocalBroadcastManager 不是一个可靠的选择。它假设底部活动仍然存在,可能不是这种情况。当您使用B时,可能会收集A以释放资源。此外,您应该取消注册LocalBroadcastManager接收器 onResume() 。所以不行。
LocalBroadcastManager
onResume()
通常应避免使用具有静态字段的单身人士。它并不担心单个字符串文本,但单例字段很容易被遗忘,并可能导致内存泄漏。如果可能的话,最好避免这种模式,在你的情况下是这样。
可能的选择。
如果该字段必须持续存在,例如用户编辑他的用户名,使用 SharedPreferences 或另一种存储解决方案(保存到服务器,保存到缓存,保存到设备SQLite数据库)。
SharedPreferences
如果该字段是临时字段并且是活动B的结果,则可以使用以下内容启动活动B. startActivityForResult() 然后通过一个结果将结果发送回活动A. Intent 。
startActivityForResult()
Intent
为您的问题提供最简单的解决方案 - 将您的价值存储在Application类中。任何活动都可以访问它并读/写值。 缺点是,如果您不小心存储了对活动的静态引用,则会导致内存泄漏。
您可以尝试使用EventBus进行水平通信:活动 - >服务,服务 - >片段等 它默认具有静态实例,您可以在onPause和onResume方法中订阅/取消订阅它。 另一个优点是STICKY EVENTS - 您可以从Service发布事件,它会等到处理它的事件 - Activity将在onResume()之后接收此事件。
恕我直言,在您的应用程序中使用Singleton设计模式总是有缺点。其中一些(从我的头脑中):
请注意,您要做的是 的 反对Android指南 强> - 如果用户点击“后退”按钮,那么他应该找到前一个 Activity 要么 Fragment 在完全相同的状态下,用户最后一次看到它,没有任何添加(除非你明确地不想将它保存在后栈中)。
Activity
Fragment
如果您仍想这样做,那么我可以建议几个选项:
Activities
onBackPressed()
再一次 - 你可以做你想做的事实并不意味着它应该完成。