ListView并在“活动”不可见时更新适配器会导致性能不佳



我有一个性能问题。

所以我正在编写一个聊天应用程序,我有一个ViewPager,其中每个单独的聊天都有碎片,ViewPager位于ChatActivity中,碎片中的消息通过一个简单的ListView显示。

只要我"最小化"我的应用程序,一切都很顺利。当应用程序最小化时,我在这段时间内只收到10条消息,然后返回到活动中,会有明显的延迟(例如,标准的Android应用程序恢复动画不会播放)。如果我再次最小化应用程序,并立即恢复它,则延迟完全消失(假设没有新消息到达)。

性能与到达的新消息数量似乎没有相关性:无论有10条还是500条新消息,延迟都是相同的。

我从Socket接收消息,将它们传递给Chat对象,后者只是将它们传递到ChatFragment,后者只使用listView.post()将它们发布到ListView中。

我的ChatFragmentListView的适配器非常琐碎,所以我不在这里发布它们,消息存储在Chat对象中的ArrayList中(适配器只是从那里提取它们)。。我真的没有做任何"花哨"的事。

简单地说,当我的Activity(以及其中的Fragments)被暂停,并且新数据被发布到ListView时,当Fragment被恢复并且ListView被"刷新"时,ListView(我认为)必须"一次做更多的工作"。

如果没有代码,这可能有点模糊,但也许有人可以告诉我我的原则是否至少正确(即,简单地将消息发布到适配器,而不管ActivityFragment对用户是否可见?)。

如果有人知道这次延误的原因,我将不胜感激。

我对新消息和ListView问题的直觉完全错误!导致速度减慢的原因是,我有一个启动器活动,它会启动以前可见的活动,或者在没有活动的情况下显示自己。我没有在它的onCreate()中调用finish(),而是简单地调用了return!这导致活动在其生命周期中继续进行,在幕后做任何事情,导致速度放缓。

最新更新