展会信息港展会大全

android开发用Thread类实现异步更新UI
来源:互联网   发布日期:2016-01-19 12:33:37   浏览:2445次  

导读:用Thread实现异步更新UI。Thread的使用简单方便,当Thread被实例化后,实例化的线程与UI主线程通信有一下几种方法:1 使用Activity包含的Handler的post()方法与UI线程通信;2 使用Activity类的runOnUiThread()方法 ...

用Thread实现异步更新UI。

Thread的使用简单方便,当Thread被实例化后,实例化的线程与UI主线程通信有一下几种方法:

1.使用Activity包含的Handler的post()方法与UI线程通信;

2.使用Activity类的runOnUiThread()方法;

3.view类的post()和postDelayed()方法与UI通信。

示例代码:

布局文件activity_main.xml:

<TextView

android:id="@+id/counter"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentLeft="true"

android:layout_alignParentTop="true"

android:layout_marginLeft="80dp"

android:layout_marginTop="134dp"

android:text=" "/>

代码文件:

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

final TextView tv = (TextView)findViewById(R.id.counter);

new Thread(new Runnable(){

@Override

public void run() {

int i = 0;

while(i < 10){

SystemClock.sleep(1000);

i++;

final int curI = i;

tv.post(new Runnable(){

@Override

public void run() {

tv.setText(curI+"% complete");

}

});

}

tv.setText("OK!");//注意这句,会有error产生

}

}).start();

}

以上代码中有句直接在非UI线程总修改UI,报错

android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

由此可见,确实是非UI线程无法直接修改UI的,只能通过其他方式。

修改这句(tv.setText("OK!");)如下:

tv.post(new Runnable(){

@Override

public void run() {

tv.setText("OK!");

}

});

赞助本站

人工智能实验室
AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港