Androidの最適な実践性能(3)性能レイアウトの向上(ListViewのスクロールをスムーズにする)
15325 ワード
この授業はあなたに教えます
バックグラウンドスレッドを使うビューオブジェクトを保持するビューホルダあなたも読むべきです
なぜ私のリストは黒いですか?Androidの最適化スムーズなスクロール
バックグラウンドスレッドを使う
バックグラウンドスレッド(「作業スレッド」)を使用して主スレッド歪を削除するので、ユーザーインターフェースの描画に専念できる.多くの場合、
以下のコード例では、画像をバックグラウンドスレッドにロードし、その後、ユーザインターフェースが完了するとそれらを適用する
バックグラウンドスレッドを使うビューオブジェクトを保持するビューホルダあなたも読むべきです
なぜ私のリストは黒いですか?Androidの最適化スムーズなスクロール
ListView
は、アプリケーションを保持する主スレッド(UIスレッド)の重い処理がないことである.ディスクへのアクセス、ネットワークへのアクセス、または単独のスレッドSQLへのアクセスを行うことを確認します.あなたのアプリケーションの状態をテストするために、StrictMode
を有効にします.バックグラウンドスレッドを使う
バックグラウンドスレッド(「作業スレッド」)を使用して主スレッド歪を削除するので、ユーザーインターフェースの描画に専念できる.多くの場合、
AsyncTask
を使用して、メインライン以外の作業を実行するための簡単な方法が提供される.AsyncTask
は、全 execute()
の要求を自動的に並べ、直列に接続する.このような挙動はグローバルの特定のプロセスであり、あなた自身のスレッドを作成する心配がないことを意味します.以下のコード例では、画像をバックグラウンドスレッドにロードし、その後、ユーザインターフェースが完了するとそれらを適用する
AsyncTask
が使用される.これはまた,場所における画像の進捗が微調整されることを示し,それらは搭載されている.// Using an AsyncTask to load the slow images in a background thread
new AsyncTask<ViewHolder, Void, Bitmap>() {
private ViewHolder v;
@Override
protected Bitmap doInBackground(ViewHolder... params) {
v = params[0];
return mFakeImageLoader.getImage();
}
@Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
if (v.position == position) {
// If this item hasn't been recycled already, hide the
// progress and set and show the image
v.progress.setVisibility(View.GONE);
v.icon.setVisibility(View.VISIBLE);
v.icon.setImageBitmap(result);
}
}
}.execute(holder);
Android 3.0(APIレベル11)を して し、 の はAsyncTask
を することで、 のプロセッサのカーネル で できるようにすることができる. execute()
を び す わりに、executeOnExecutor()
と の を してもいいし、 じ に してもいい. なカーネルの に じて.
View Holder
あなたのコードは、findViewById()
の なローリング に ListView
を び すことができます.これは を させます.Adapter
にしても に ります inflated view ,まだ する と が です.1つの の で り し されるfindViewById()
は、「View Holder」を する モードである.ViewHolder
オブジェクトの レイアウトのタグフィールド のコンポーネントビューは、すぐにそれらにアクセスすることができます.まず、 な を するためにクラスを る があります.たとえば:static class ViewHolder {
TextView text;
TextView timestamp;
ImageView icon;
ProgressBar progress;
int position;
}
ViewHolder
を し、レイアウト に する.ViewHolder holder = new ViewHolder ();
holder . icon = ( ImageView ) convertView . findViewById ( R . id . listitem_image );
holder . text = ( TextView ) convertView . findViewById ( R . id . listitem_text );
holder . timestamp = ( TextView ) convertView . findViewById ( R . id . listitem_timestamp );
holder . progress = ( ProgressBar ) convertView . findViewById ( R . id . progress_spinner );
convertView . setTag ( holder );
は、 ビューに にアクセスできます.チェックシートなしで、 なプロセッササイクルを できます.