Android设备上的Android Activity很慢

时间:2014-02-01 17:07:21

标签: android performance list imageview

我开发了一款可以从网络流式传输视频的应用。我有一个列出视频的活动,包括他们的图标,标题和状态(最新更新)。对于每一行,都有一个视频缩略图,一个视频标题,然后是一个“新鲜”图标,表示它是一个新的上传。

在模拟器中,这工作相对较好。在2.3和4.0.3 HTC Evo设备中,它运行良好。在HTC One 4.3设备上,此活动非常慢。单击列表中的项目,将您带到另一个活动,工作正常。除列表活动外,其他活动都可以。

这是我到目前为止所做的实验。我从xml中删除了“新鲜”图标,效果很好。所以我认为它与这个图标有关。图像非常大(1000x900px),但仅以50x50dp渲染。我没有尝试缩小此图像以查看性能。但如果这就是问题,那么旧的HTC手机怎么能完美呈现呢。

只有HTC One和老款HTC手机的其他区别在于HTC One有一个操作栏,旧手机使用设备中的专用菜单键。

有没有办法在设备中运行应用程序时检查内存使用情况或进程,看看它为什么这么慢?

更新: 我已将图像大小调整为100x100px,它肯定更快。但我仍然注意到有一些滞后。

以下是该列表行的布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="2dp"
    android:paddingTop="2dp" >

    <ImageView
        android:id="@+id/icon"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true" />

    <ImageView
        android:id="@+id/status"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true" />

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginLeft="10dp"
        android:layout_toLeftOf="@id/status"
        android:layout_toRightOf="@id/icon" />
</RelativeLayout>

2 个答案:

答案 0 :(得分:4)

尝试启动方法分析(参见图片),然后启动您的活动,然后再次点击图片中的相同按钮停止方法分析。 Eclipse将生成一个报告,您将在其中查看哪个方法需要花费时间执行。因此,您可以找出导致延迟的方法。

enter image description here

答案 1 :(得分:0)

我注意到从4.1到4.3或4.2时HTC的性能问题。使用HTC One时,禁用硬件加速实际上提高了许多页面的性能。您可以尝试在清单中禁用硬件加速,然后在主要活动中为除HTC之外的所有设备启用它。

其他设备在启用硬件加速的同一页面上具有出色的性能。只有HTC才挣扎,需要以下代码:

if(!(android.os.Build.MODEL.equalsIgnoreCase("HTC One") && Integer.parseInt(android.os.Build.VERSION.SDK) == 18)) { getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); }