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 Thread( new Runnable() {

public void run() {

Bitmap b = loadImageFromNetwork();

mImageView.setImageBitmap( b );

}

}).start();

}

public void onClick( View v ) {

new Thread( new Runnable() {

public void run() {

Bitmap b = loadImageFromNetwork();

mImageView.setImageBitmap( b );

}

}).start();

}

这段代码好像很好地解决了你遇到的问题,因为它不会阻塞UI线程。很不幸,它违背了单线程模型:Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。在这段代码片段中,在一个工作者线程中使用ImageView的方法,这回引起一些很古怪的问题。查处这个问题并修复这个bug会很困难而且也很耗时。

Andriod提供了几种在其他线程中访问UI线程的方法。或许你已经对其中的一些方式很熟悉,但下面是一个更全面的列表:

Activity.runOnUiThread( Runnable )

View.post( Runnable )

View.postDelayed( Runnable, long )

Hanlder

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

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%20%20%20%20new%20Thread(%20new%20Runnable()%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20public%20void%20run()%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20final%20Bitmap%20b%20%3D%20loadImageFromNetwork()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mImageView.post(%20new%20Runnable()%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mImageView.setImageBitmap(%20b%20)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D).start()%3B%0A%7D"

上一页  1 2 3 4  下一页

Tags:Android 线程 模型

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