我有一个性能问题。
所以我正在编写一个聊天应用程序,我有一个ViewPager
,其中每个单独的聊天都有碎片,ViewPager
位于ChatActivity
中,碎片中的消息通过一个简单的ListView
显示。
只要我"最小化"我的应用程序,一切都很顺利。当应用程序最小化时,我在这段时间内只收到10条消息,然后返回到活动中,会有明显的延迟(例如,标准的Android应用程序恢复动画不会播放)。如果我再次最小化应用程序,并立即恢复它,则延迟完全消失(假设没有新消息到达)。
性能与到达的新消息数量似乎没有相关性:无论有10条还是500条新消息,延迟都是相同的。
我从Socket
接收消息,将它们传递给Chat
对象,后者只是将它们传递到ChatFragment
,后者只使用listView.post()
将它们发布到ListView
中。
我的ChatFragment
和ListView
的适配器非常琐碎,所以我不在这里发布它们,消息存储在Chat
对象中的ArrayList
中(适配器只是从那里提取它们)。。我真的没有做任何"花哨"的事。
简单地说,当我的Activity
(以及其中的Fragments)被暂停,并且新数据被发布到ListView
时,当Fragment
被恢复并且ListView
被"刷新"时,ListView
(我认为)必须"一次做更多的工作"。
如果没有代码,这可能有点模糊,但也许有人可以告诉我我的原则是否至少正确(即,简单地将消息发布到适配器,而不管Activity
和Fragment
对用户是否可见?)。
如果有人知道这次延误的原因,我将不胜感激。
我对新消息和ListView
问题的直觉完全错误!导致速度减慢的原因是,我有一个启动器活动,它会启动以前可见的活动,或者在没有活动的情况下显示自己。我没有在它的onCreate()
中调用finish()
,而是简单地调用了return
!这导致活动在其生命周期中继续进行,在幕后做任何事情,导致速度放缓。