8

私はAndroidListViewを持っており、スクロールしているときに小さな(たとえば、1〜5フレーム)スタッターが約1秒ごとに発生します。多くのAndroid携帯電話にはアニメーションの滑らかさに関するこれらの問題があることを認識していますが、私の携帯電話(Android2.2を実行しているMotorolaA855)では、ネイティブの連絡先リストが非常にスムーズにスクロールします。連絡先リストのアイテムビューは、私のリストのアイテムビューよりも複雑です。

<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;
    }

前もって感謝します!

4

2 に答える 2

6

コードを見ずにこれが発生する理由を知ることは困難です。

ただし、確認する場所の1つは、ListAdapterのgetView()メソッドです(カスタムアダプターを使用している場合)。毎回新しいビューを作成するのではなく、このメソッドの引数として渡されたビューを再利用してみてください。また、この方法(ネットワーク呼び出しなど)では、あまり重いことをしないでください。実際、最高のパフォーマンスを得るには、できるだけ無駄を省き、意味のあるものにするようにしてください。

于 2011-06-09T13:56:31.870 に答える
3

効率的なアダプターを試しましたか http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List14.html

私の見解では、アニメーションの滑らかさの問題は、ガベージコレクターがバックグラウンドで実行されていることが原因です。たくさんのオブジェクトを作成している場合は、リストビューのスクロールに遅れが見られます。

この助けを願っています。

于 2011-06-09T13:58:54.397 に答える