(一) 单项选择题(每题2分,共30分)
1,Activity的生命周期方法onRestart()方法是在哪个方法执行完后调用(B) A. onStart() B. onStop() C.onPause() D.onResume()
2,要通过adb命令查看已连接的设备,正确的是(A) A. adb devices B. adb show devices C. adb start devices D.adb have devices
3,关于Framelayout下面说法正确的是( B) A.是将组件水平依次排列的布局 B.是将组件全都叠加在左上角的一种布局 C.是将组件垂直依次排列的布局 D.是将组件拉伸铺满父组件的布局
4,Android中,关于service的启动两种方式描述不正确的是( D) A.使用startService()方法启动服务,调用者与服务没有关联,即使调用者退出,服务仍然运行。 B.使用bindService()方法启动服务,调用者与服务绑定在一起,调用者一旦退出,服务也就 终止。 C.使用startService()方法启动服务,如果服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法,可以调用stopService()方法来结束服务。 D.使用bindService()方法启动服务,如果服务未被创建,系统会先调用服务的onCreate()方法,接着调用onBind()方法,可以调用stopService()方法来结束服务。
5, 关于AlertDialog的说法不正确的是(A )
A.要想使用对话框首先要使用new关键字创建AlertDialog的实例 B.对话框的显示需要调用show方法 C.setPositiveButton方法是用来加确定按钮的 D.setNegativeButton方法是用来加取消按钮的
6,Android解析xml的方法中,将整个文件加载到内存中进行解析的是?( C) A.SAX B.PULL C.DOM D.JSON
7, JSONObject obj=new JSONObject(); 通过obj对象存储一个字符串变量name写法正确的是(D ) A. obj.set(“name”,”zhangsan”); B. obj.setValue(“name”,”zhangsan”); C. obj.put(“name”,”zhangsan”); D. obj.putValue(“name”,”zhangsan”);
8, 已知httpClient连接网络的url,通过get方式访问时要传递name参数,下列方式正确的是( A)
A. httpGet.addParams(“name”, name); B. list.add(new BasicNameValuePair(“name”, name)); C. httpGet(url, name); D. url = url “?name=” name;
9, 可以用来辅助WebView处理JavaScript对话框的类是 ©
A. WebSettings B. WebChromeClient C. WebViewClient D. WebViewChrome
10, 关于webview加载网页的两种方式,说法不正确的是:( C)
A. loadUrl()可以打开远程网址、也可以加载本地Html数据; B. loadData()显示中文网页内容(含空格的处理); C. 通过webView.loadData(“http://www.baidu.com”);可以打开百度页面; D. 通过webView.loadUrl(“http://www.baidu.com”);可以打开百度页面;
11, 可以用来辅助WebView设置其一些属性和状态的类是(A )
A. WebSettings B. WebViewClient C. WebChromeClient D. WebViewChrome
12, 下列哪个接口是Camera中处理快门关闭的接口( A )
A.android.hardware.Camera.ShutterCallback B.android.hardware.Camera.PreviewCallback C.android.hardware.Camera.ErrorCallback D.android.hardware.Camera.AutoFocusCallback
13, 使用openGL ES开发要有一个回调类需要实现一个接口是( D)
A. android.opengl.GLSurfaceView.OpenGL B. android.opengl.GLSurfaceView.Renderer C. android.opengl.GLSurfaceView.Render D. android.opengl.GLSurfaceView.OpenGLEs
14, 以下可以设置Frame动画可以循环播放的属性是:(A )
A. android:oneshot=“false” B. android:drawable="@drawable/start_icon1" C. android:background="@anim/start_animation" D. android:duration=“20”
15, 下列哪个选项是正确进行电话簿查询的过程:( A)
代码语言:javascript复制A. Uri uri= ContactsContract.Contacts.CONTENT_URI;
Cursor cs=getContentResolver().query(uri, null, null, null, null); while(cs.moveToNext()){
int uid=cs.getInt(cs.getColumnIndex(ContactsContract.Contacts._ID));
String name=cs.getString(cs.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
Log.d("mylog","" uid ":" name);
}
代码语言:javascript复制B. Uri uri= new Uri(ContactsContract.Contacts.CONTENT_URI);
Cursor cs=getContentResolver().query(uri, null, null, null, null); while(cs.moveToNext()){
int uid=cs.getInt(cs.getColumnIndex(ContactsContract.Contacts._ID));
String name=cs.getString(cs.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
Log.d("mylog","" uid ":" name);
}
代码语言:javascript复制C. Uri uri= ContactsContract.Contacts.CONTENT_URI;
Cursor cs=getContentResolver().query(uri);
while(cs.moveToNext()){
int uid=cs.getInt(cs.getColumnIndex(ContactsContract.Contacts._ID));
String name=cs.getString(cs.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
Log.d("mylog","" uid ":" name);
}
代码语言:javascript复制D. Uri uri= new Uri(ContactsContract.Contacts.CONTENT_URI);
Cursor cs=getContentResolver().query(uri);
while(cs.moveToNext()){
int uid=cs.getInt(ContactsContract.Contacts._ID));
String name=cs.getString(ContactsContract.Contacts.DISPLAY_NAME));
Log.d("mylog","" uid ":" name);
}
(二) 多项选择题(每题4分,共20分)
1, 要在我们的应用中使用百度地图需要( ABC)
A. 下载百度地图的API jar包 B. 申请使用该api的密钥key C. 将百度api jar包引入我们的项目 D. 向百度付费购买地图服务
2, 在为ListView列表提供数据的Adapter中有两个方法是必须实现的,他们是(CD )
A. getItem B. getItemId C. getCount D. getView
3, 下列属于AsyncTask的方法是( BCD)
A. run B. execute C. doInBackground D. onPostExecute
4, 创建MediaPlayer对象播放音乐时,读取音乐文件可以通过以下哪些方法进行?(AB )
A. MediaPlayer.create(this, Uri.parse("/sdcard/music.mp3")); B. mediaplayer.setDataSource("/sdcard/music.mp3"); C. MediaPlayer.read("/sdcard/music.mp3"); D. mediaplayer.getDataSource("/sdcard/music.mp3");
5, 关于res/raw和assets描述正确的是(ABD )
A. res/raw中的文件会被映射到R.java文件中 B. assets文件夹下的文件不会被映射到R.java中 C. res/raw可以有目录结构,也就是res/raw目录下可以再建立文件夹 D. assets可以有目录结构,也就是assets目录下可以再建立文件夹
(三) 填空题(每题2分,共10分) 1, 全局定时器中设置周期性执行某个任务的方法是______________。 2. 解除 Android 的蓝牙配对的方法是 ________。 3. 若有点坐标数值float vertices[] = { -1.0f, 1.0f, 0.0f, -1.0f, -1.0f, 0.0f, 1.0f, -1.0f, 0.0f, 1.0f, 1.0f, 0.0f }; 那么这些点组成的图形是 。 4. 要注册各种传感器需要先获取______对象。 5. 通过org.json.JSONObject和org.json.JSONArray构建json数据时,需要捕获________异常。
答案: 1.setRepeating 2.removeBond 3.一个平面的正方形 4.SensorManager 5.JSONException
(四)问答题 第一题, 简述Fragment的生命周期。
答: 1、 onAttach:当 f ragment 第一次与 Activity 产生关联时就会调用以后不再调用 。 2、onCreate:在 on Attach 执行完后会立刻调用此方法,通常被用于读取保存的状态值,获取或者初始化一些数据,但是该方法不执行,窗口是不会显示的,因此如果获取的数据需要访问网络,最好新开线程。 3、onCreateView:创建 Fra gment 中显示的 view, 其中inflater 用来装载布局文件, container 表示 标签的父标签对应的 ViewGroup 对象,savedInstanceState 可以获取 Fragment 保存的状态 4、onActivityCreated:在 Activity.onCreate 方法调用后会立刻调用此方法,表示窗口已经初始化完毕,此时可以调用控件了 5、onStart():开始执行与控件相关的逻辑代码,如按键点击 6、onResume():这是 Fragment 从创建到显示的最后一个回调的方法 7、onPause():当发生界面跳转时,临时暂停,暂停时间是500ms ,0.5s 后直接进入下面的 onStop 方法 8、onStop():当该方法返回时, Fra gment 将从屏幕上消失 9、 onDestroyView():当 fragm ent 状态被保存,或者从回退栈弹出,该方法被调用 10、onDestroy():当 Fra gment 不再被使用时,如按返回键,就会调用此方法 11、 onDetach(): Fragment 生命周期的最后一个方法,执行完后将不再与 Activity 关联,将释放所有 fragment 对象和资源
第二题:解析下什么是ANR ANR是Application NotResponding的缩写,指应用没有响应。Broadcast超时时间为10秒,按键无响应的超时时间为5秒,前台Service无响应的超时时间为20秒,后台Service为200秒。
产生的原因: 潜在的耗时操作,例如网络或数据库操作,或者高耗时的计算如改变位图尺寸,应该在子线程里(或者以数据库操作为例,通过异步请求的方式)来完成。然而,不是说你的主线程阻塞在那里等待子线程的完成——也不是调用 Thread.wait()或是Thread.sleep()。替代的方法是,主线程应该为子线程提供一个Handler,以便完成时能够提交给主线程。以这种方式设计你的应用程序,将能保证你的主线程保持对输入的响应性并能避免由于5秒输入事件的超时引发的ANR对话框。
解决方法: 1、运行在主线程里的任何方法都尽可能少做事情。特别是,Activity应该在它的关键生命周期方法(如onCreate()和onResume())里尽可能少的去做创建操作。(可以采用重新开启子线程的方式,然后使用Handler Message的方式做一些操作,比如更新主线程中的ui等)
2、应用程序应该避免在BroadcastReceiver里做耗时的操作或计算。但不再是在子线程里做这些任务(因为 BroadcastReceiver的生命周期短),替代的是,如果响应Intent广播需要执行一个耗时的动作的话,应用程序应该启动一个 Service。(此处需要注意的是可以在广播接受者中启动Service,但是却不可以在Service中启动broadcasereciver,关于原因后续会有介绍,此处不是本文重点)
3、避免在Intent Receiver里启动一个Activity,因为它会创建一个新的画面,并从当前用户正在运行的程序上抢夺焦点。如果你的应用程序在响应Intent广 播时需要向用户展示什么,你应该使用Notification Manager来实现。
第三题:如何创建Socket
客户端编程步骤:
a) 创建客户端套接字(指定服务器端IP地址与端口号) b) 连接(Android 创建Socket时会自动连接) c) 与服务器端进行通信 d) 关闭套接字
服务器端:
a) 创建一个ServerSocket,用于监听客户端Socket的连接请求 b) 采用循环不断接受来自客户端的请求 c) 每当接受到客户端Socket的请求,服务器端也对应产生一个Socket
第四题:简述Handler的工作过程。
Looper:是一个消息分发器,在主线程创建的时候就会创建一个Looper对象 messageQueue :消息队列,是由message组成的一个 队列 handler:从messageQueue中获取到message,然后执行动作,可以再主线程和子线程中互相传递数据
在主线程创建之后会创建一个Looper对象,创建Looper对象的时候会去创建一个messageQueue,而Looper是一个轮询器,会不停的轮询messageQueue中的消息,在获取到消息之后就会把这个消息交给handler来进行处理,在主线程中创建一个handler对象,这个handler对象不仅可以获取到消息进行处理,也可以把一个消息放到消息队列中。
第五题: 简述View、SurfaceView和GLSurfaceView的作用。 View:显示视图,内置画布,提供图形绘制函数、触屏事件、按键事件函数等;必须在UI主线程内更新画面,速度较慢。 SurfaceView:基于view视图进行拓展的视图类,更适合2D游戏的开发;是view的子类,类似使用双缓机制,在新的线程中更新画面所以刷新界面速度比view快。 GLSurfaceView:基于SurfaceView视图再次进行拓展的视图类,专用于3D游戏开发的视图;是SurfaceView的子类,openGL专用。
View和SurfaceView区别: View:必须在UI的主线程中更新画面,用于被动更新画面。 surfaceView:UI线程和子线程中都可以。在一个新启动的线程中重新绘制画面,主动更新画面。