WEB开发网
开发学院手机开发Android 开发 Android 线程模型(Painless Threading)分析 阅读

Android 线程模型(Painless Threading)分析

 2010-02-07 23:14:00 来源:WEB开发网   
核心提示:Activity.runOnUiThread( Runnable )View.post( Runnable )View.postDelayed( Runnable, long )Hanlder上面的任何一个类或方法都可以修复我们前面代码中出现的问题,onClick( View v ) {new Thread( new

Activity.runOnUiThread( Runnable )

View.post( Runnable )

View.postDelayed( Runnable, long )

Hanlder

上面的任何一个类或方法都可以修复我们前面代码中出现的问题。

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重写。

public void onClick( View v ) {

new DownloadImageTask().execute( "http://example.com/image.png" );

}

private class DownloadImageTask extends AsyncTask {

protected Bitmap doInBackground( String... urls ) {

return loadImageFormNetwork( urls[0] );

}

protected void onPostExecute( Bitmap result ) {

mImageView.setImageBitmap( result );

}

}

正如你看到的,使用AsyncTask必须要继承它。使用AsyncTask非常重要的是:AsyncTask的实例必须在UI线程中创建而且只能被使用一次。你可以使用预读AsyncTask的文档来来了解如何使用这个类,下面大概地了解一下它是如何工作的:

你可以使用泛型参数制定任务的参数、中间值(progress values)和任何的最终执行结果

doInBackground()方法会自动地在工作者线程中执行

onPreExecute()、onPostExecute()和onProgressUpdate()方法会在UI线程中被调用

doInBackground()方法的返回值会被传递给onPostExecute()方法

Tags:Android 线程 模型

编辑录入:coldstar [复制链接] [打 印]
赞助商链接