简体   繁体   English

当我从一个菜单移动到另一个菜单并返回时,Leanback android Tv 中的 BrowseSupportFragment 会调用服务器

[英]BrowseSupportFragment in Leanback android Tv makes Server calls when I move from one menu to another and back

I have implemented the BrowseSupportFragment from the Leanback library.我已经实现了 Leanback 库中的 BrowseSupportFragment。 It has a left navigation bar with rowItems and headerIcons.它有一个带有 rowItems 和 headerIcons 的左侧导航栏。 Each time I move from one row in the navigation drawer the fragments are reloaded.每次我从导航抽屉中的一行移动时,都会重新加载片段。 This is not good since it keeps making server calls and therefore my image caching doest work.这不好,因为它不断进行服务器调用,因此我的图像缓存不起作用。 This is how I call each fragment in my BrowseSupportFragment, using same idea as here: https://www.javatips.net/api/platform_frameworks_support-master/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseSupportFragment.java这就是我在 BrowseSupportFragment 中调用每个片段的方式,使用与这里相同的想法: https ://www.javatips.net/api/platform_frameworks_support-master/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseSupportFragment.java

   private static class PageRowFragmentFactory extends BrowseSupportFragment.FragmentFactory {

        private final BackgroundManager mBackgroundManager;

        PageRowFragmentFactory(BackgroundManager backgroundManager) {
            this.mBackgroundManager = backgroundManager;
        }

        // new fragment is registered and called from here
        @Override
        public Fragment createFragment(Object rowObj) {
            Row row = (Row) rowObj;
            mBackgroundManager.setDrawable(null);
            if (row.getHeaderItem().getId() == HEADER_ID_1) {
                return new MovieGalleryFragment();
            } else if (row.getHeaderItem().getId() == HEADER_ID_2) {
                return  new SeriesGalleryFragment();
            } else if (row.getHeaderItem().
                    getId() == HEADER_ID_3) {
                return new SortByGenreFragment();
            } else if (row.getHeaderItem().
                    getId() == HEADER_ID_4) {
                return new SortByCountryFragment();
            } else if (row.getHeaderItem().
                    getId() == HEADER_ID_5) {
                return new WebViewFragment();
            }
            throw new
                    IllegalArgumentException(String.format("Invalid row %s", rowObj));
        }

    }

 public static class PageFragmentAdapterImpl extends MainFragmentAdapter<MovieGalleryFragment> {

        public PageFragmentAdapterImpl(MovieGalleryFragment fragment) {
            super(fragment);
        }
    }


and in my fragments i extend在我的片段中,我延伸

public class MovieGalleryFragment extends VerticalGridSupportFragment implements BrowseSupportFragment.MainFragmentAdapterProvider{

final MainActivityFragment.PageFragmentAdapterImpl mMainFragmentAdapter = new MainActivityFragment.PageFragmentAdapterImpl(this);

  
        
..........       
 }

so when i move from MovieGalleryFragment() to SeriesGalleryFragment and back to MovieGalleryFragment(), it is reloaded and images recalled from server.因此,当我从 MovieGalleryFragment() 移动到 SeriesGalleryFragment 并返回 MovieGalleryFragment() 时,它会重新加载并从服务器调用图像。 How do I prevent this ??我如何防止这种情况?

thank you.谢谢你。

Your image cache shouldn't be live in one of these fragments, so the fragment being destroyed and recreated should not cause another fetch.您的图像缓存不应存在于这些片段之一中,因此被销毁和重新创建的片段不应导致再次获取。 For example, MovieGalleryFragment should request an image from an app-wide cache before attempting to fetch from the server.例如,MovieGalleryFragment 应该在尝试从服务器获取图像之前从应用程序范围的缓存中请求图像。 Since you want to maintain an in-memory cache, a disk cache, and cleanup rules, it can be very complicated to get this right.由于您要维护内存中缓存、磁盘缓存和清理规则,因此正确处理可能会非常复杂。 I'd recommend relying on something like Picasso, Coil, Glide, etc. In general, you want to heavily rely on cache this way anyway since the user might close the app and reopen it shortly after.我建议使用像 Picasso、Coil、Glide 等的东西。一般来说,无论如何你都希望以这种方式严重依赖缓存,因为用户可能会关闭应用程序并在不久之后重新打开它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM