嵌套片段和房间中的性能不断提高

时间:2018-09-28 12:05:32

标签: java android database fragment

我正在为Android制作应用程序,该图片显示了我现在拥有的内容:

enter image description here

所以我有MainActivity,带有FrameLayout和Toolbar。 (在某些片段中,我需要隐藏工具栏,在某些更改中,它的名称)

在MainActivity中,我有FrameLayout。

该应用程序的工作方式如下:我有服务器,可以在其中获取数据。我制作了存储库+ viewmodel + livedata(例如在Google Codelabs中),并使用socket.io与服务器连接。

例如,我有2个片段来显示一些信息,因此它是如何工作的:

首先,用户进入FragmentMain(下面的代码):

MainActivity中的方法来设置片段

protected void setFragment(Fragment fragment) {
    FragmentTransaction t = getSupportFragmentManager().beginTransaction();
    t.replace(R.id.fragment_placeholder, fragment);
    t.commit();
}

我也正在使用此代码与数据库连接,并通过google建议向用户显示实际数据(我是指建筑组件)

所以在onCreate中我正在呼叫

 appUpdateViewModel = ViewModelProviders.of(this).get(AppUpdateViewModel.class);

 fragmentMain = new FragmentMain();

 setFragment(fragmentMain);

在FragmentMain中,我正在按照以下步骤显示嵌套的片段(组件或系统

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    ...
    ((MainActivityPfff)getActivity()).setTextTabBar(getString(R.string.fragment_main_toolbar));

    ViewPager viewPager = view.findViewById(R.id.viewPager);
    viewPager.setAdapter(new AdapterPagerMain(getActivity(),getFragmentManager()));
    ...
}

此代码用于AdapterPagerMain

@Override
public Fragment getItem(int position) {
    if (position == 0) {
        return new FragmentComponents();
    } else if (position == 1) {
        return new SystemFragment();
    } else {
        return new SystemFragment(); //notUsing
    }
}

这是FragmentComponents的代码(ComponentsFragment结构相同,但是显示了另一个数据)

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    ...
    appUpdateViewModel = ViewModelProviders.of(this).get(AppUpdateViewModel.class);
    appUpdateViewModel.getAllAppUpdates().observe(this, new Observer<List<AppUpdate>>() {
        @Override
        public void onChanged(@Nullable List<AppUpdate> appUpdates) {
            adapterUpdates.setUpdates(appUpdates);
        }
    });
    ...
}

当我显示FragmentMain时,我可以单击按钮并转到新的Fragment(例如FragmentAboutApp),所以我这样做是这样的:

@Override
        public void onClick(View view) {
            ((MainActivity)getActivity()).setFragment(new FragmentAboutApp());
        }

所以,我遇到的第一个问题是-当我单击FragmentAboutApp中的按钮时,它显示FragmentMain,我正在获取FragmentMain,但没有任何内容(在FragmentComponents和FragmentSystem中,我有recyclerViews,即从数据库获取信息)

我也不知道获取实际数据的正确方法(我的意思是在所有片段中创建新的appViewModels并观察数据)。我想知道内存泄漏

我也想知道使用嵌套片段。我应该重新创建吗?我需要将性能提高到最高水平。或者也许我需要在删除新旧片段时删除它的旧实例? (请显示代码,我该怎么做)

最后一个问题-我正在从服务器大json文件下载一些信息:

我在不同片段中使用了这些信息的不同部分(但我只下载一个文件)

因此,现在我在MainActivity中连接到服务器,并在MainActivity生命周期中获取实际的json。片段只是在该数据库上观察,然后改变,它们显示了实际信息

谢谢!

0 个答案:

没有答案