进程死亡时如何处理Fragment Instance Variables

How to deal with Fragment Instance Variables when process death occurs

我正在关注这篇关于将片段与 BottomNavigationView 结合使用的中篇文章:

https://medium.com/@oluwabukunmi.aluko/bottom-navigation-view-with-fragments-a074bfd08711

但是作者并没有深入探讨当Process Death发生时如何处理。我应该如何处理所有片段实例变量?因为我在进程终止后返回到应用程序时得到空指针。

public class MainActivity extends AppCompatActivity{

    private Fragment currentBottomNavFragment;
    private FragmentHome fragmentHome;
    private FragmentSearch fragmentSearch;
    private FragmentProfile fragmentProfile;
}

编辑1:______________________________

case R.id.bottomnav_home:
                        Log.d(TAG, "onNavigationItemSelected: " + fragmentHome);
                        fragmentHome = (FragmentHome) getSupportFragmentManager()
                                .findFragmentByTag("FRAGMENT_HOME");
                        if (fragmentHome == null) {
                            fragmentHome = new FragmentHome();
                            getSupportFragmentManager().beginTransaction()
                                    .add(R.id.main_fragment_container, fragmentHome, "FRAGMENT_HOME")
                                    .commit();
                        }else {
                            Log.d(TAG, "onNavigationItemSelected: Fragment home not null");
                            Log.d(TAG, "onNavigationItemSelected: " + fragmentHome);
                        }

                        return true;

当我模拟进程死亡点击首页导航视图时,第一个log.d

Log.d(TAG, "onNavigationItemSelected: " + fragmentHome);

returns 一个空的 fragmentHome,但是 if else 语句转到 else 意味着 fragmentHome 不为空。为什么我会遇到这个问题?

处理这种情况的安全方法是尝试通过其唯一标记获取片段,然后再尝试自己添加它。

fragment = supportFragmentManager.findFragmentByTag("someTag");
if(fragment == null) {
    fragment = new MyFragment();
    supportFragmentManager.beginTransaction().add(fragment, R.id.container, "someTag");
} 

片段管理器有一个 putFragmentgetFragment 方法,您可以使用它来保存和恢复片段的实例状态。

这让我可以保存我的片段实例变量,这样它们在进程死亡后不会 return null。