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

Android线程模型(Painless Threading)

 2010-09-10 00:38:00 来源:WEB开发网   
核心提示:quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getf
quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" height="15" width="14">

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 );

}

}

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()方法

在doInBackground()方法中你可以调用publishProgress()方法,每一次调用都会使UI线程执行一次onProgressUpdate()方法

你可以在任何时候任何线程中取消这个任务

除了官方的文档,你可以阅读Shelves和Photostream源代码中的几个复杂的示例。我强烈地推荐阅读Shelves的源代码,它会使你知道如何在配置更改之间持久化任务以及在activity被销毁时正确的取消任务。

不管是否使用AsyncTask,始终记住以下两个关于单线程模型的准则:不要阻塞UI线程以及一切Android UI操作都在UI线程中执行。AsyncTask仅仅是使你能够更容易地遵守这两条准则。

http://android.group.javaeye.com/group/blog/382683

上一页  1 2 3 4 

Tags:Android 线程 模型

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