android ui线程

所谓ui线程非线程安全的,意思是指不能从飞ui线程即主线程更改ui。相信很多人都知道这个事项;先上如下代码:

public class MainActivity extends Activity {


	Button button=null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Log.e("main", Thread.currentThread().getName());
		button=(Button)findViewById(R.id.one);
		startThread(button);
	}

	public void startThread(Button button)
	{
		final Button lButton=button;
		new Thread(new Runnable() {
			
			@Override
			public void run() {
				// TODO Auto-generated method stub
				Log.e("thread run", Thread.currentThread().getName());
				lButton.setVisibility(View.INVISIBLE);
			}
		}).start();
	}
	
当你看到如上代码的时候你是否一口咬定程序必崩,很遗憾的告诉你程序依然运行正常。再另一种情况:

	
	public void onClick(View view)
	{
		Button button=(Button)view;
		String name=button.getText().toString();
		Intent intent=new Intent();
		intent.setClass(this, ProfileActivity.class);
		intent.putExtra("name", name);
		this.startActivity(intent);
		startThread(button);
	}
当startThread方法在由用户点击按钮触发时,你是否已经犹豫这样会不会崩溃?答案是程序如约地挂了。注意到前面的startThread方法调用在oncreate中,此时还未调用onresume,你可以试试在onstar方法中调用,结果是onresume之前调用没有问题,之后便会崩溃。

最终结论:在ui界面没有出来之前即onresume方法还未调用时,非主线程中是可以更改ui界面的,在ui界面出来之后,任何子线程的ui操作都会崩溃。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值