可以在 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。它将适用于设备旋转。
我正在使用一个库,该库使用我经过的接口与调用 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。它将适用于设备旋转。