2011-07-21 12 views

答えて

2

FPSの計算についてはわかりません(システム全体で実行する必要があり、ビューごとに計算されるはずはないと思いますが)Hierarchy Viewerを使用して、それぞれViewのパフォーマンスをプロファイルできます。測定に必要な時間を与え、レイアウトを計算し、それぞれViewをミリ秒単位で描画し、黄色と赤色の円を表示して遅いViewオブジェクトを見つけるのに役立ちます。

0

このListAdapterは別のListAdapterをラップし、1秒あたりに表示されたビューの数に関するログステートメントを出力します。

import android.database.DataSetObserver; 
import android.util.Log; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ListAdapter; 

public class VpsAdapter implements ListAdapter { 
    protected int vpsViewCount = 0; 
    protected long vpsStartTimeNanos = System.nanoTime(); 
    protected ListAdapter delegate; 

    public VpsAdapter(ListAdapter delegate) { 
     super(); 
     this.delegate = delegate; 
    } 

    public void resetViewsPerSecond() { 
     vpsViewCount = 0; 
     vpsStartTimeNanos = System.nanoTime(); 
    } 

    public double getViewsPerSecond() { 
     final long now = System.nanoTime(); 
     return (vpsViewCount/(double)(now - vpsStartTimeNanos)) * 1e9; 
    } 

    public int getViewsPerSecondViewCount() { 
     return vpsViewCount; 
    } 

    @Override 
    public boolean areAllItemsEnabled() { 
     return delegate.areAllItemsEnabled(); 
    } 

    @Override 
    public int getCount() { 
     return delegate.getCount(); 
    } 

    @Override 
    public Object getItem(int i) { 
     return delegate.getItem(i); 
    } 

    @Override 
    public long getItemId(int i) { 
     return delegate.getItemId(i); 
    } 

    @Override 
    public int getItemViewType(int i) { 
     return delegate.getItemViewType(i); 
    } 

    @Override 
    public View getView(int i, View view, ViewGroup viewGroup) { 
     ++vpsViewCount; 
     Log.d("VpsAdapter", String.format("VpsAdapter: %.2f views per second (%s views)", getViewsPerSecond(), getViewsPerSecondViewCount())); 
     return delegate.getView(i, view, viewGroup); 
    } 

    @Override 
    public int getViewTypeCount() { 
     return delegate.getViewTypeCount(); 
    } 

    @Override 
    public boolean hasStableIds() { 
     return delegate.hasStableIds(); 
    } 

    @Override 
    public boolean isEmpty() { 
     return delegate.isEmpty(); 
    } 

    @Override 
    public boolean isEnabled(int i) { 
     return delegate.isEnabled(i); 
    } 

    @Override 
    public void registerDataSetObserver(DataSetObserver dataSetObserver) { 
     delegate.registerDataSetObserver(dataSetObserver); 
    } 

    @Override 
    public void unregisterDataSetObserver(DataSetObserver dataSetObserver) { 
     delegate.unregisterDataSetObserver(dataSetObserver); 
    } 
} 

使用するには、既存のListAdapterをVpsAdapterでラップするだけです(例:あなたは結果を取得する準備ができたら、タイミング、およびgetViewsPerSecond()を開始する準備ができたら

setListAdapter(new VpsAdapter(myAdapter)); 

その後resetViewsPerSecond()を呼び出します。また、アダプタは、getView()へのすべてのコールに対して現在のvpsをコンソールに記録します。

このアダプタをListView.smoothScrollTo(adapter.getCount()-1)と組み合わせて使用​​すると、プログラムでリストビューを下にスクロールして平均vpsを得ることができます。

関連する問題