可以在 Android ViewModel 中使用 activity 引用保存复杂对象吗?

Is it ok to save complex object with activity reference in Android ViewModel?

我正在使用一个库,该库使用我经过的接口与调用 activity 进行通信,问题是一旦我旋转设备,activity 的新实例就不会收到回调了。我在考虑在 AndroidViewModel 中保存这个库的实例,这样做会不会出现内存问题,因为库的实例引用了我的 activity?

旋转时出现问题:

public class MainActivity implements Lib.Callback
    {
        private Lib mLib;

        @Override
        public void onCreate ( final Bundle savedInstanceState){
            mLib = new Lib(this);
        }

        @Override
        protected void callback() {
          ...
        }
    }

如果我将 "mLib" 放在 AndroidViewModel 中会更好吗?或者对于这种情况有更好的选择吗?

Would I get a memory issue doing so because the instance of the lib references my activity?

ViewModel 中保存库引用将导致您的内存泄漏 scenario.As 你的库有 Activity 的引用,当你旋转你的 phone 时,该库将包含你的旧 activity.

的引用

如果你这样做,你会泄露 Activity。 而且您仍然只有旧实例。不是新的。 例如在 ViewModel 中实现回调,然后从 ViewModel 公开一些 LiveData,Activity 可以观察到这些 LiveData。它将适用于设备旋转。