android 反纠结app开发: 在线程中更新view

浏览:
字体:
发布时间:2013-12-13 14:31:35
来源:


大体上想实现一个思路:

对一个view 的内容进行不停地变化, 通过按钮停止这种变化,以达到随机选择的目的.


开发过程中 使用textview 模拟, 建立线程

mythread = new Thread()

{

@Override

public void run()

{

while(isrun)

{

改变textview

}

}

}

结果遭遇报错 Only the original thread that created a view hierarchy can touch its views


通过在网上查阅大量资料, 得知android 的view 和相关控件不是线程安全的,不可以在线程中直接改变.


这种情况下 需要使用handle .


通过Handler更新UI实例:

步骤:

1、创建Handler对象(此处创建于主线程中便于更新UI)。

2、构建Runnable对象,在Runnable中更新界面。

3、在子线程的run方法中向UI线程post,runnable对象来更新UI。


在下面的代码中, 通过变量ab ,不断更新textview中的内容 ,通过按钮可以结束线程.


import android.os.Bundle;import android.os.Handler;import android.os.SystemClock;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.view.SurfaceHolder;import android.view.View;import android.widget.Button;import android.widget.TextView;public class MainActivity extends Activity  {	private Button button;	private TextView textview;	private final int SPLASH_DISPLAY_LENGHT = 1;	private static int flag = 0;	private static int count=0;	private int ab=1;	private boolean isrun = true;	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);				button = (Button)findViewById(R.id.button1);		textview = (TextView)findViewById(R.id.textView1);		final Handler handler= new Handler();  		  		   final Runnable runnable = new Runnable() {  		        public void run() {  		            textview.setText(Integer.toString(ab));  		        }  		    };  		  				        		        		    final Thread t = new Thread(){		        	//public boolean isrun=true;		    	@Override		            public void run() {  		            	while(isrun)		            	{		                handler.post(runnable); //加入到消息队列     这样没有启动新的线程,虽然没有报异常。但仍然阻塞ProgressDialog的显示  		                ab++;		                try {		                    sleep(1000);                            //直接调用		                  } catch (InterruptedException e) {		                    return;		                  }		            	}		            }  		        };  		        t.start();  		        button.setOnClickListener(new Button.OnClickListener()				{					@Override					public void onClick(View view)					{						isrun=false;					}				});		 	}  			           }		



>更多相关文章
24小时热门资讯
24小时回复排行
资讯 | QQ | 安全 | 编程 | 数据库 | 系统 | 网络 | 考试 | 站长 | 关于东联 | 安全雇佣 | 搞笑视频大全 | 微信学院 | 视频课程 |
关于我们 | 联系我们 | 广告服务 | 免责申明 | 作品发布 | 网站地图 | 官方微博 | 技术培训
Copyright © 2007 - 2024 Vm888.Com. All Rights Reserved
粤公网安备 44060402001498号 粤ICP备19097316号 请遵循相关法律法规
');})();