1.【多选】activity的启动模式有哪些?( )
A.standard B.singleTop C. singleTask D.singleInstance
2.【单选】下列哪些语句关于内存回收的说明是正确的?( )
A.程序员必须创建一个线程来释放内存 B.内存回收程序负责释放无用内存
C.内存回收程序允许程序员直接释放内存 D.内存回收程序可以在指定的时间释放内存对象
3.【单选】String a1=new String("abc"); String a2=new String("abc"); String a3=new String("abcd"); 总共创建( )个String对象
A.2 B.3 C.5 D.6
4.【单选】Math.round(11.5)和Math.round(-11.5)分别等于多少?( )
A.11,-11 B.11,-12 C. 12,-11 D.12,-12
5.【多选】Intent传递数据时,下列的数据类型哪些可以被传递?( )
A.Serializable B.Charsequence C. Parcelable D.Bundle
6.【多选】android中的动画分类有?( )
A.Tween B.Draw C. Frame D.Animation
7.【单选】下面退出Activity错误的方法是?( )
A.System.exit() B.onStop() C.抛异常强制退出 D.Finish()
8.【单选】下列哪些语句关于内存回收的说明是正确的? ( )
A、程序员必须创建一个线程来释放内存
B、 内存回收程序负责释放无用内存
C、 内存回收程序允许程序员直接释放内存
D、 内存回收程序可以在指定的时间释放内存对象
9.【单选】Android项目工程下面的assets目录的作用是什么( )
A、放置应用到的图片资源。
B、主要放置多媒体等数据文件
C、放置字符串,颜色,数组等常量数据
D、放置一些与UI相应的布局文件,都是xml文件
10.【多选】下列对android NDK的理解正确的是( )
A、 NDK是一系列工具的集合
B、 NDK 提供了一份稳定、功能有限的 API 头文件声明。
C、 使 “Java+C” 的开发方式终于转正,成为官方支持的开发方式
D、 NDK 将是 Android 平台支持 C 开发的开端
11.【单选】关于res/raw目录说法正确的是()
A.这里的文件是原封不动的存储到设备上不会转化为二进制的格式
B.这里的文件是原封不动的存储到设备上会转化为二进制的格式
C.这里的文件最终以二进制的格式存储到指定的包中
D.这里的文件最终不会以二进制的格式存储到指定的包中
12.【多选】下面是属于GLSurFaceView特性的是()
A.管理一个surface,这个surface就是一块特殊的内存,能直接排版到Android的视图view上
B.管理一个EGL display,它能让opengl把内容渲染到上述的surface上
C.让渲染器在独立的线程里运作,和UI线程分离
D.可以直接从内存或者DMA等硬件接口取得图像数据
13.【单选】对于一个已经存在的SharedPreferences对象setting,想向其中存入一个字符串"person",setting应该先调用什么方法( )
A.edit() B.save() C.commit() D.putString()
14.【多选】android中使用SQLiteOpenHelper这个辅助类时,可以生成一个数据库,并可以对数据库版本进行管理的方法可以是( )
A.getWriteableDatabase() B.getReadableDatabase() C.getDatabase() D.getAbleDatabase()
15.【多选】以下属于提高listview效率的正确的方法()
A.利用convertview回收视图 B缩小每个item以节省资源. C.利用viewholder模式D.尽量不要加载图片。
1.ABCD 2. B 3.C 4.C 5.ABCD 6.AC 7.A 8.B 9.B 10.ABCD 11.A 12.ABC 13.A
14.AB 15.AC
一.什么是ANR 如何避免它?
答:ANR:Application Not Responding
在Android中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应。当出现下列情况时,Android就会显示ANR对话框了:
对输入事件(如按键、触摸屏事件)的响应超过5秒
意向接受器(intentReceiver)超过10秒钟仍未执行完毕
Android应用程序完全运行在一个独立的线程中(例如main)。这就意味着,任何在主线程中运行的,需要消耗大量时间的操作都会引发ANR。因为此时,你的应用程序已经没有机会去响应输入事件和意向广播(Intentbroadcast)。
因此,任何运行在主线程中的方法,都要尽可能的只做少量的工作。特别是活动生命周期中的重要方法如onCreate()和onResume()等更应如此。潜在的比较耗时的操作,如访问网络和数据库;或者是开销很大的计算,比如改变位图的大小,需要在一个单独的子线程中完成(或者是使用异步请求,如数据库操作)。但这并不意味着你的主线程需要进入阻塞状态已等待子线程结束-- 也不需要调用Therad.wait()或者Thread.sleep()方法。取而代之的是,主线程为子线程提供一个句柄(Handler),让子线程在即将结束的时候调用它(xing:可以参看Snake的例子,这种方法与以前我们所接触的有所不同)。使用这种方法涉及你的应用程序,能够保证你的程序对输入保持良好的响应,从而避免因为输入事件超过5秒钟不被处理而产生的ANR。这种实践需要应用到所有显示用户界面的线程,因为他们都面临着同样的超时问题。
二.请介绍下android大众常用的五种布局。你觉得对于非常复杂的界面,从性能方面考虑,你会选择使用哪种布局,并说明原因。
FrameLayout(框架布局)
只可以有一个控件,并且不能设计这个控件的位置,控件会放在左上角
LinearLayout(线性布局)
一行只能控制一个控件的线性布局,所以当有很多控件需要在一个界面中列出时,可以用LinearLayout布局
AbsoluteLayout(绝对布局)
可以放置多个控件,并且可以自己定义控件的x,y的位置
RelativeLayout(相对布局)
比如要在一行上显示多个控件,这时就要用到相对布局
TableLayout(表格布局)
将子元素的位置分配到行或列中,一个TableLayout由许多的TableRow组成
2.会尽量选用RelaticeLayout布局,尽量少使用LinearLayout,以减少布局的嵌套,来提高性能。
(安卓基础知识是否熟悉)
三.请大致讲解一下制作一个listview并显示出数据的流程
四.请讲解自定义一个view的流程
(是否有过开发经验)
五.内存溢出问题 oom是什么,发生oom的根本原因是什么,一般什么情况会导致oom的发生,如何避免,检测内存泄露 工具
导致内存泄漏主要的原因是,先前申请了内存空间而忘记了释放。如果程序中存在对无用对象的引用,那么这些对象就会驻留内存,消耗内存,因为无法让垃圾回收器GC验证这些对象是否不再需要。如果存在对象的引用,这个对象就被定义为"有效的活动",同时不会被释放。要确定对象所占内存将被回收,我们就要务必确认该对象不再会被使用。典型的做法就是把对象数据成员设为null或者从集合中移除该对象。但当局部变量不需要时,不需明显的设为null,因为一个方法执行完毕时,这些引用会自动被清理。
Java 内存泄露的根本原因就是 保存了不可能再被访问的变量类型的引用
(1) 数据库的cursor没有关闭
(2) 构造adapter时,没有使用缓存contentview
(3) Bitmap对象不使用时采用recycle()释放内存
(4) activity中的对象的生命周期大于activity
DDMS
六.请问安卓是如何调用c/c++语言的,如果对它有所了解,请简述在android中它的调用过程。
通过jni来调用C/C++
)安装和下载Cygwin,下载 An#from 面试常见问题--android高级面试题精选3篇来自学优网http://www.gkstk.com/ end#droid NDK
)在ndk项目中JNI接口的设计
)使用C/C++实现本地方法
)JNI生成动态链接库.so文件
)将动态链接库复制到java工程,在java工程中调用,运行java工程即可
1.图片加载问题
2.框架问题
3.界面适配问题