インターネットからオブジェクトを取得しますが、BaseAdapter に直接渡すと、スクロール リストビューが非常に遅く、スムーズではありません。以下で、私はこの質問をしました:
「アプリケーションがメイン スレッドで処理しすぎている可能性があります」とスクロールすると、リスト ビューがクラッシュします。
AsyncTask を作成してデータを取得し、それをアダプターに渡して高速化し、スムーズにスクロールする方法を知りたいです。
インターネットからオブジェクトを取得しますが、BaseAdapter に直接渡すと、スクロール リストビューが非常に遅く、スムーズではありません。以下で、私はこの質問をしました:
「アプリケーションがメイン スレッドで処理しすぎている可能性があります」とスクロールすると、リスト ビューがクラッシュします。
AsyncTask を作成してデータを取得し、それをアダプターに渡して高速化し、スムーズにスクロールする方法を知りたいです。
この例のようにする
タスクを実行する
new LongOperation().execute("");
そしてタスクはこのようなものです。
private class LongOperation extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
for(int i=0;i<5;i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return "Executed";
}
@Override
protected void onPostExecute(String result) {
TextView txt = (TextView) findViewById(R.id.output);
txt.setText("Executed"); // txt.setText(result);
//might want to change "executed" for the returned string passed into onPostExecute() but that is upto you
}
@Override
protected void onPreExecute() {
}
@Override
protected void onProgressUpdate(Void... values) {
}
}
DoinBackground メソッドは、サーバーからデータをダウンロードする場所です。実行後、そのデータをベース アダプタに割り当てます。DoinBackground メソッドからビューを更新することはできません。ビューを変更するには、UIThread を使用する必要があります。
それが役に立てば幸い!!!
最善の方法は、アダプターを作成して ListView に設定する前に、AsyncTask でデータをダウンロードすることです。
それでも、 ListView が既に作成されているときにデータをダウンロードする必要がある場合は、@Arman StrangerがdoInbackgound()内にすべての作業関数を実装する必要がある前に言ったように。
画像をダウンロードしたら、小さいサイズにサイズ変更し、notifyDataSetChanged()を実行してリストビューを再描画する必要があります。