我有一个Android ListView
,它在滚动时会有很小的停顿(比如说,1-5帧),大约每秒钟左右。我意识到许多Android手机在动画流畅性方面都有这些问题,但在我的手机上(运行Android 2.2的摩托罗拉A855),原生联系人列表滚动非常流畅。联系人列表中的项目视图比我列表中的项视图更复杂,即:
<RelativeLayout>
<TextView />
<TextView />
</RelativeLayout>
我只想实现与原生联系人列表一样好的平滑度。这似乎在不优化本机代码的情况下是可能的,但也许我错了。
我尝试了几件事:我进一步简化了项视图,并尝试以编程方式而不是XML形式对其进行实例化。我还尝试改变我对项目点击事件的反应方式,如下链接所示:
http://groups.google.com/group/android-developers/browse_thread/thread/7dc261a6b382ea74?pli=1
这些似乎都不会对性能产生任何影响。
我可以在我的应用程序中做些什么来提高性能吗?我希望将此应用程序部署到许多手机上,因此在我的情况下,更改手机设置或根除设备不是一个选项。以下是我的适配器类中的getView方法:
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater flater = (LayoutInflater)context.getSystemService(ListActivity.LAYOUT_INFLATER_SERVICE);
layout = flater.inflate(R.layout.song_view, parent, false);
TextView first = (TextView)layout.findViewById(R.id.firstLine);
TextView second = (TextView)layout.findViewById(R.id.secondLine);
Thing t = array.get(position);
first.setText(t.title);
second.setText(t.name);
return layout;
}
提前感谢!
在没有看到代码的情况下,很难知道为什么会发生这种情况。
但是,有一个地方可以查看ListAdapter中的getView()方法(假设您使用的是自定义适配器)。尝试重新使用作为参数传递给此方法的View,而不是每次都创建一个新的。此外,在这种方法中不要做任何太重的事情(例如网络调用),事实上,要尽可能精简和吝啬,以获得最佳性能。
您尝试过高效适配器吗http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List14.html
从我的角度来看,动画流畅性的问题是由于垃圾收集器在后台运行。如果你正在创建大量的对象,那么你会在列表视图滚动中看到滞后。
希望得到帮助。