Android校招笔试题

2022-11-30 15:57:03 浏览数 (2)

(一) 单项选择题(每题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线程和子线程中都可以。在一个新启动的线程中重新绘制画面,主动更新画面。

0 人点赞