首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android回收站速度慢

Android回收站速度慢
EN

Stack Overflow用户
提问于 2020-06-09 00:14:30
回答 1查看 1.6K关注 0票数 1

这只是一个嘲弄,让你知道我在做什么。

我的回收者观点有着复杂的逻辑。让我指出他们,

complex.

  • Loading
  • 视图持有者UI是在每个5视图持有者之后的
  • 横幅广告。

我的数据来自网络,我一直在使用房间+重装+寻呼适配器。

用户体验非常糟糕。我需要一些建议。我相信有两件事影响我的滚动功能。

  • xml膨胀。
  • 在UI线程中加载admob ads (他们希望我们在ui线程中这样做。但我还是不知道他们为什么要做这些疯狂的事情。)

我需要一些建议,如何改进和提供一些良好的用户体验。

EN

回答 1

Stack Overflow用户

发布于 2020-06-09 01:11:57

由于没有源代码,我无法尝试评估造成这种情况的确切原因。但我以前也经历过这样的事情,我有一些可能的解决办法。

( 1)将长期运行的任务从UI线程移开:

我注意到你的数据来自房间+改造。默认情况下,除非调用allowMainThreadQueries(),否则Room必须以异步方式操作。如果调用了allowMainThreadQueries(),如果意外地试图在UI线程上获取数据,则可以检查代码。

2)您正确地实现了RecyclerView (RV)吗?

RV尽可能地减少xml膨胀的数量,并通过重用相同视图类型的充气布局来提高性能。因此,如果您只有两个视图类型,如您的问题中所示,RV只会膨胀3-6您的布局(即使您在您的列表中有100个项目),并将它附加到ViewHolder,然后在您滚动列表时将视图与项目绑定和循环。然而,如果实施不当,RV可能表现不佳。我以前体验过的一个例子是在RV适配器中以视图类型返回位置。

代码语言:javascript
复制
public class SampleAdapter extends RecyclerView.Adapter<RVItem.ViewHolder> {

    private final List<Item> items = new ArrayList<>();

    @Override
    public int getItemViewType(int position) {
        return position; //Never do this
        return items.get(position).getType(); //Do this
    }
}

因此,您可以尝试检查您的实现/逻辑中是否存在RV错误。

3)在Android 中使用Profiler

如果上述任何建议都不能解决这个问题。我能想到的最后一种方法是使用Profiler记录跟踪,而你在RV中滚动并通过分析跟踪来识别哪个调用是耗时/阻塞的。更多信息:https://developer.android.com/studio/profile/android-profiler

更多信息

最后,我可以知道在UI线程中加载AdMob广告是什么意思吗?据我所知,AdMob像UnifiedNativeAd一样异步加载和返回ads。只有这样,您才会尝试在UI线程上使用来自UnifiedNativeAd的数据来膨胀和设置视图,而这并不是真正的UI阻塞任务。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62273067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档