Activity/ViewModel 在显示新的 Activity 时重新创建

Activity/ViewModel recreated when new Activity is shown

我有 Activity A,它显示从 Web 服务异步加载的项目列表。此列表存储在 ViewModel 中。当您 select 其中一项 Activity B 将打开 selected 项目的详细信息。 Activity B 是 Activity A 的 child Activity。按下后退按钮将返回到 Activity A...但是,此时 Activity A 被销毁并创建一个新的 ViewModel,它再次调用 Web 服务。

这与我在 Activity B 处于前景时旋转设备时看到的其他问题不同。 Activity A 的 onDestroy 方法在项目被 selected 和显示 Activity B 时不被调用...但是当后退按钮被按下时它被调用。

我不希望每次用户返回时 ViewModel 都刷新数据 Activity A...知道是什么原因造成的吗?

相关清单信息:

    <activity android:name=".ActivityA" />
    <activity
        android:name=".ActivityB"
        android:label="@string/title_b"
        android:parentActivityName=".ActivityA" />

Activity答:

class ActivityA : AppCompatActivity() {
    private lateinit var mainViewModel: MainViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.a_activity)
        mainViewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
        ...

不确定还有哪些其他代码可以帮助诊断问题....

您需要删除清单中的 android:parentActivityName=".ActivityA"。如official documentation所述:

The system reads this attribute to determine which activity should be started when the user presses the Up button in the action bar.

因此,当您 return 到之前的 activity 时,新的 ViewModel 被创建。