これは、Android 開発者の Web サイトのサンプル コードです。
public void onClick(View v) {
new DownloadImageTask().execute("http://example.com/image.png");
}
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
/** The system calls this to perform work in a worker thread and
* delivers it the parameters given to AsyncTask.execute() */
protected Bitmap doInBackground(String... urls) {
return loadImageFromNetwork(urls[0]);
}
/** The system calls this to perform work in the UI thread and delivers
* the result from doInBackground() */
protected void onPostExecute(Bitmap result) {
mImageView.setImageBitmap(result);
}
}
ここで、 の行new DownloadImageTask().execute("http://example.com/image.png");
でnew DownloadImageTask()
、クラスのオブジェクトを作成しますDownloadImageTask
か、それとも を拡張する無名クラスを作成しますDownloadImageTask
か?
比較のために:
このコードでは、
public void onClick(View v) {
new Thread(new Runnable() {
public void run() {
Bitmap b = loadImageFromNetwork("http://example.com/image.png");
mImageView.setImageBitmap(b);
}
}).start();
}
Thread クラスから派生したクラスのオブジェクトが作成され、インスタンス化されましたが、Thread 型のオブジェクトではなく、そのオブジェクトへの参照が保存されていません (これにより、将来再び使用できなくなります)。前のコードの場合はどうなりますか?