|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
管理所有设备发生的事件比如屏幕旋转屏幕关闭或者一些其他的程序的控制逻辑也应该写在这里他的初始化函数是-(id)initWithNibName:(NSString*)nibNamebundle:(NSBundle*)nibBundle后面那个NibName是InterfaceBuilder里设计的界面现在IB已经集成到XCode里了一个Android程序默许情形下也只要一个Process,但一个Process下却能够有很多个Thread。
在这么多Thread傍边,有一个Thread,我们称之为UIThread。UIThread在Android程序运转的时分就被创立,是一个Process傍边的主线程MainThread,次要是卖力把持UI界面的显现、更新和控件交互。在Android程序创立之初,一个Process出现的是单线程模子,一切的义务都在一个线程中运转。因而,我们以为,UIThread所实行的每个函数,所消费的工夫都应当是越短越好。而其他对照费时的事情(会见收集,下载数据,查询数据库等),都应当交由子线程往实行,以避免堵塞主线程。
那末,UIThread怎样和其他Thread一同事情呢?经常使用办法是:
出生一个主线程的Handler物件,当作Listener往让子线程能将讯息Push到主线程的MessageQuene里,以便触发主线程的handlerMessage()函数,让主线程晓得子线程的形态,并在主线程更新UI。如,在子线程的形态产生变更时,我们必要更新UI。假如在子线程中间接更新UI,一般会抛出上面的非常:
android.view.ViewRoot$CalledFromWrongThreadException:Onlytheoriginalthreadthatcreatedaviewhierarchycantouchitsviews.
意义是,没法在子线程中更新UI。为此,我们必要经由过程Handler物件,关照主线程UiThread来更新界面。
以下,起首创立一个Handler,来监听Message的事务:
privatefinalintUPDATE_UI=1;
privateHandlermHandler=newMainHandler();
privateclassMainHandlerextendsHandler{
@Override
publicvoidhandleMessage(Messagemsg){
switch(msg.what){
caseUPDATE_UI:{
Log.i(“TTSDeamon”,“UPDATE_UI”);
showTextView.setText(editText.getText().toString());
ShowAnimation();
break;
}
default:
break;
}
}
}
或
privateHandlermHandler=newHandler(){
@Override
publicvoidhandleMessage(Messagemsg){
switch(msg.what){
caseUPDATE_UI:{
Log.i(“TTSDeamon”,“UPDATE_UI”);
showTextView.setText(editText.getText().toString());
ShowAnimation();
break;
}
default:
break;
}
}
}
当子线程的形态产生变更,则在子线程中收回Message,关照更新UI。
mHandler.sendEmptyMessageDelayed(UPDATE_UI,0)
很少去思考,没有去多问几个为什么。这是学习的大忌,我认识到了自己学习方法上的错误。孔子说,学而不思则罔,思而不学则殆。一点也没错,学和思是要结合的,这样才能进步。现在回想一下,我学到了什么?自己也无言以对了。 |
|