gpt4 book ai didi

android - 由于配置更改而重新创建 Activity 的静态成员时会发生什么

转载 作者:行者123 更新时间:2023-11-30 01:11:52 25 4
gpt4 key购买 nike

我想在我的Activity中创建一个静态presenter对象,这样当Activity因为配置改变而被重新创建时,它会保留presenter实例和我的业务逻辑不会受到影响。

我的 Activity 的代码是:

    public class HomeActivity extends AppCompatActivity {

public static HomePresenter presenter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);

if (presenter == null){
presenter = new HomePresenter();
}
}
}

最佳答案

静态实例不会发生任何事情。但是如果不删除对静态演示者的引用,这样做可能会泄漏内存(请参阅 Avoiding memory leaks)。

我会建议另一种方法。覆盖 onRetainNonConfigurationInstance() 以在 Activity 由于配置更改(例如旋转)而被销毁时保留对象。并在配置更改后使用 getLastNonConfigurationInstance() 获取完全相同的对象。

 public class HomeActivity extends AppCompatActivity {

public HomePresenter presenter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);

presenter = (HomePresenter)getLastNonConfigurationInstance();
if (presenter == null){
presenter = new HomePresenter();
}
}

@Override
public Object onRetainNonConfigurationInstance() {
return presenter;
}
}

您还可以使用 Fragment 在配置更改期间使对象保持 Activity 状态,请参阅 RetainingAnObject .

关于android - 由于配置更改而重新创建 Activity 的静态成员时会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38344008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com