Android线程模型(Painless Threading)
2010-09-10 00:38:00 来源:WEB开发网public void onClick( View v ) {
new Thread( new Runnable() {
public void run() {
final Bitmap b = loadImageFromNetwork();
mImageView.post( new Runnable() {
mImageView.setImageBitmap( b );
});
}
}).start();
}
public void onClick( View v ) {
new Thread( new Runnable() {
public void run() {
final Bitmap b = loadImageFromNetwork();
mImageView.post( new Runnable() {
mImageView.setImageBitmap( b );
});
}
}).start();
}
很不幸的是这些类或方法同样会使你的代码很复杂很难理解。然而当你需要实现一些很复杂的操作并需要频繁地更新UI时这会变得更糟糕。为了解决这个问题,Android 1.5提供了一个工具类:AsyncTask,它使创建需要与用户界面交互的长时间运行的任务变得更简单。
在Android 1.0和1.1中具有与AsyncTask相同功能的类UserTask。它提供了完全一样的API,你需要做的只是把它的代码拷贝的你的程序中。
AsyncTask的目标是替你管理你的线程。前面的代码可以很容易地使用AsyncTask重写。
Java代码 < src="http://android.group.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" mce_src="http://android.group.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=public%20void%20onClick(%20View%20v%20)%20%7B%0A%20%20%20%20%20new%20DownloadImageTask().execute(%20%22http%3A%2F%2Fexample.com%2Fimage.png%22%20)%3B%0A%7D%0A%0Aprivate%20class%20DownloadImageTask%20extends%20AsyncTask%20%7B%0A%20%20%20%20%20protected%20Bitmap%20doInBackground(%20String...%20urls%20)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20loadImageFormNetwork(%20urls%5B0%5D%20)%3B%0A%20%20%20%20%20%7D%0A%0A%20%20%20%20%20protected%20void%20onPostExecute(%20Bitmap%20result%20)%20%7B%0A%20%20%20%20%20%20%20%20%20mImageView.setImageBitmap(%20result%20)%3B%0A%20%20%20%20%20%7D%0A%7D"
更多精彩
赞助商链接