Android第一行代码 第9章Word文档下载推荐.docx
《Android第一行代码 第9章Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Android第一行代码 第9章Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
3.Android主线程负责分发事件给相应的用户界面组件,包括绘制用户界面的事件,在主线程中应用与AndroidUI交互,因此,主线程又被称为_________________线程。
UI(主线程)
4.在Android应用中,只有_________________线程能够维护和更新UI组件的状态,因此,用户界面是一种单线程模型。
UI
5.当Android应用需要执行一些耗时操作时,如果不将这类操作放在子线程里去运行,就会导致_________________被阻塞,从而影响用户对软件的正常使用。
6.Android的UI组件不是线程安全的,在子线程中更新UI会导致_________________。
程序崩溃
7.Android多线程编程基本模式与Java多线程编程相同,主要有两种基本模式:
即定义一个继承自_________________的线程类和定义一个实现_________________接口的类。
Thread
Runnable
8.Android系统异步消息通信机制由以下类组成:
_________________、_________________、MessageQueue和Looper。
Message
Handler
9.在Android系统异步消息通信机制中,_________________是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据。
其中,包括交由Handler对象发送的数据,对象中还有可以使用若干附加字段承载数据,主要两个int型字段和一个Object型字段。
10.在Android系统异步消息通信机制中,_________________主要用于发送和处理消息。
发送消息一般使用它的sendMessage()方法,而发出的消息经过一系列地辗转处理后,最终会传递到它的handleMessage()方法中。
11.在Android系统异步消息通信机制中,_________________是消息队列,用来存放通过Handler发布的消息,消息按照先进先出的队列原则等待被处理。
MessageQueu
12.在Android系统异步消息通信机制中,_________________是MessageQueue的管理者,它驱使消息在队列中前进。
Looper
13.请简述在Handle-Message异步消息通信机制中子线程中进行UI操作的编程逻辑。
(1)首先,在主线程当中创建一个Handler对象,并重写handleMessage()方法。
(2)然后,当子线程中需要进行UI操作时,就创建一个Message对象,并通过Handler将消息发送出去。
(3)之后,这条消息会被添加到MessageQueue的队列中等待被处理,而Looper则会一直尝试从MessageQueue中取出待处理消息,最后分发回Handler的handleMessage()方法中。
(4)由于Handler是在主线程中创建的,所以此时handleMessage()方法中的代码也会在主线程中运行,于是就可以地进行UI操作了。
14.请阅读下面程序片断,根据注释在空白划线处填写代码。
//创建Handler对象,重写其handleMessage()方法,接收Message消息对象
privateHandlerhandler=_________________{
//重写handleMessage()方法
publicvoid_________________(Messagemsg){
_________________{//判断消息中携带的what字段内容
case当what字段内容与常量UPDATE_TEXT的值相符时
text.setText("
Nicetomeetyou"
);
//修改text显示文本
break;
default:
}
}
};
(1)newHandler()
(2)handleMessage
(3)switch(msg.what)
15.请阅读下面程序片断,根据注释在空白划线处填写代码。
(1)_________________{//开辟新线程,创建Runnable对象
@Override
publicvoidrun(){//实现run()方法
//新建Message类的对象message
(2)_______________________________;
//设置对象message的what字段值为常量UPDATE_TEXT
(3)_______________________________;
//调用对象handler的sendMessage()方法发送该消息对象
(4)_______________________________;
}
}).(5)__________________;
//启动线程
(1)newThread(newRunnable()
(2)Messagemessage=newMessage();
(3)message.what=UPDATE_TEXT
(4)handler.sendMessage(message)
(5)start()
16._________________是AsynchronousTask(异步任务)的缩写,“异步任务”是指一项任务运行在一个_________________线程中,而它的运行结果却由另外一个_________________线程发布,也就是说,同一个类中包含了运行在不同线程中的方法。
AsyncTask
后台
17.请简述AsyncTask在应用中编程逻辑。
(1)首先,定义继承AsyncTask的子类,在其中通常需要实现以下方法;
(2)实现doInBackground()回调方法,这是运行在后台线程中的方法。
(3)为了更新用户界面UI,应该实现onPostExecute()方法,这是运行在前台UI线程中的方法,负责接收doInBackground()方法的返回结果,以便安全地更新UI。
(4)在UI线程中创建AsyncTask类对象,调用AsyncTask对象的execute()方法启动AsyncTask后台任务执行。
18.AsyncTask类最大的特点是同一个类中既有运行于_________________中的方法,也有运行于_________________中的方法,将运行在不同线程中的方法组合在同一个类中,借助_________________或_________________在方法之间传递数据,实现了线程间的数据传递。
后台线程
方法参数
返回值
19.doInBackground()方法在AsyncTask类对象启动后,运行于_________________中,而它的_________________又作为_________________传递给onPostExecute()方法,同样,onPostExecute()方法在doBackground()运行结束后立即开始运行于_________________中,显然doBackground()和onPostExecute()在运行时间上存在异步关系。
参数
UI主线程
20.在doInBackground()方法中调用_________________方法,可以将后台任务运行过程中产生的一些中间结果作为参数传递给运行在UI线程中onProgressUpdate()方法
publishProgress()
21.但某些情况下,开发者希望变量能适用于多种数据类型,即定义变量的类型为“通用类型”(GenericType),在实际使用时再指定它的具体类型。
这就是_________________的基本思想。
泛型
22.AsyncTask类是个泛型(Generics)类,使用了_________________个泛型(GenericType)参数。
3
23.AsyncTask类的第1个泛型参数规定了执行后台任务的_________________方法的参数类型。
doInBackground()
24.AsyncTask的后台任务doInBackground()方法运行过程中,如果有些中间结果需要传递回UI主线程,可以调用_________________方法,将中间结果作为这个方法的参数传递给运行在主线程中的_________________方法,这两个方法的数据类型就是中间结果数据类型,由AsyncTask类的第_________________个泛型参数指定。
onProgressUpdate()
2
25.AsyncTask的后台任务方法doInBackground()返回值将会作为参数传递给运行在主线程中的_________________、_________________方法,因此,三者的数据类型都是由AsyncTask类的第_________________个泛型参数指定。
onCancelled()
onPostExecute()
26.AsyncTask泛型参数并不是都要用的,当某个类型变量在实际程序中不需要时,定义AsyncTask类时,在相应的泛型参数位置上使用_________________,它相当于一个占位符。
Void
27.调用AsyncTask对象_________________方法可以取消任务。
调用这个方法后,随后调用isCancelled()方法将返回true。
调用这个方法,还会引起在doInBackground()方法返回后,调用_________________而不再调用onPostExecute()方法。
cancel(boolean)
onCancelled(Object)
28.为了保证AsyncTask类正常工作,AsyncTask类实例必须在_________________线程中创建。
29.为了保证AsyncTask类正常工作,execute()方法必须在_________________线程中调用。
UI
30.AsyncTask任务只能执行一次,如果试图第二次去执行任