一份安卓笔试题的反思改错

本文深入探讨了Android中的关键技术和概念,包括Math.round()方法的行为、Intent数据传递、动画分类、内存管理、ListView优化策略等,并提供了关于ANR问题的解决方案及内存溢出的预防措施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Math.round() 正数四舍五入,负数五舍六入

例:

正数:Math.round(11.5)=12

负数:Math.round(-11.5)=-11

正数:Math.round(11.46)=11

负数:Math.round(-11.46)=-11

正数:Math.round(11.68)=12

负数:Math.round(-11.68)=-12

2、Intent传递数据时,下列的数据类型哪些可以被传递( ABCD ) (多选)

A、Serializable

B、charsequence

C、Parcelable

D、Bundle

Serializable :将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable 接口,使用ObjectInputStream 和 ObjectOutputStream 进行对象的读写。

charsequence :


在JDK1.4中,引入了CharSequence接口,实现了这个接口的类有:CharBuffer、String、StringBuffer、StringBuilder这个四个类。

CharBuffer为nio里面用的一个类,String实现这个接口理所当然,StringBuffer也是一个CharSequence,StringBuilder是Java抄袭C#的一个类,基本和StringBuffer类一样,效率高,但是不保证线程安全,在不需要多线程的环境下可以考虑。

提供这么一个接口,有些处理String或者StringBuffer的类就不用重载了。但是这个接口提供的方法有限,只有下面几个:charat、length、subSequence、toString这几个方法,感觉如果有必要,还是重载的比较好,避免用instaneof这个操作符。

Parcelable :

Android提供了一种新的类型:Parcel。本类被用作封装数据的容器,封装后的数据可以通过Intent或IPC传递。 除了基本类型以

外,只有实现了Parcelable接口的类才能被放入Parcel中。

是GOOGLE在安卓中实现的另一种序列化,功能和Serializable相似,主要是序列化的方式不同


Bundle:Bundle是将数据传递到另一个上下文中或保存或回复你自己状态的数据存储方式。它的数据不是持久化状态。

解释转载自blog.youkuaiyun.com/xingfeng2

3、下面属于android的动画分类的有( AB )(多项)

A、Tween

B、Frame.

C、Draw

D、Animation

android3.0后增加了属性动画,分类为两部分,一类是view animation,包括tween animation(补间动画)和frame animation(逐帧动画),一类是property animation(属性动画)

4、下面退出Activity错误的方法是( C)

A、finish()

B、抛异常强制退出

C、System.exit()

D、onStop()

System.exit(0) 0是正常退出 其他数字是表示不正常退出

5、下列哪些语句关于内存回收的说明是正确的? ( B )

A、 程序员必须创建一个线程来释放内存

B、内存回收程序负责释放无用内存

C、内存回收程序允许程序员直接释放内存

D、内存回收程序可以在指定的时间释放内存对象

6、Android项目工程下面的assets目录的作用是什么(B)

A、放置应用到的图片资源。
B、主要放置多媒体等数据文件
C、放置字符串,颜色,数组等常量数据
D、放置一些与UI相应的布局文件,都是xml文件

7、关于res/raw目录说法正确的是(A)

A、这里的文件是原封不动的存储到设备上不会转换为二进制的格式

B、这里的文件是原封不动的存储到设备上会转换为二进制的格式

C、这里的文件最终以二进制的格式存储到指定的包中

D、这里的文件最终不会以二进制的格式存储到指定的包中

8、下列对android NDK的理解正确的是( ABCD )

A、 NDK是一系列工具的集合


B、 NDK 提供了一份稳定、功能有限的 API 头文件声明。
C、 使 “Java+C” 的开发方式终于转正,成为官方支持的开发方式
D、 NDK 将是 Android 平台支持 C 开发的开端

9、 下面是属于GLSurFaceView特性的是( ABC )(多选)
A、管理一个surface,这个surface就是一块特殊的内存,能直接排版到android的视图
view上。
B、管理一个EGL display,它能让opengl把内容渲染到上述的surface上。
C、让渲染器在独立的线程里运作,和UI线程分离。
D、可以直接从内存或者DMA等硬件接口取得图像数据

10、【多选】以下属于提高listview效率的正确的方法( AC )

A.利用convertview回收视图

B缩小每个item以节省资源.

C.利用viewholder模式

D.尽量不要加载图片。

论述题:

一.什么是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。这种实践需要应用到所有显示用户界面的线程,因为他们都面临着同样的超时问题。

二.内存溢出问题 oom是什么,发生oom的根本原因是什么,一般什么情况会导致oom的发生,如何避免,检测内存泄露 工具

导致内存泄漏主要的原因是,先前申请了内存空间而忘记了释放。如果程序中存在对无用对象的引用,那么这些对象就会驻留内存,消耗内存,因为无法让垃圾回收器GC验证这些对象是否不再需要。如果存在对象的引用,这个对象就被定义为"有效的活动",同时不会被释放。要确定对象所占内存将被回收,我们就要务必确认该对象不再会被使用。典型的做法就是把对象数据成员设为null或者从集合中移除该对象。但当局部变量不需要时,不需明显的设为null,因为一个方法执行完毕时,这些引用会自动被清理。

Java 内存泄露的根本原因就是 保存了不可能再被访问的变量类型的引用

(1) 数据库的cursor没有关闭
(2) 构造adapter时,没有使用缓存contentview
(3) Bitmap对象不使用时采用recycle()释放内存
(4) activity中的对象的生命周期大于activity

DDMS

一、二 转载自blog.youkuaiyun.com/wr7518110


三.请问安卓是如何调用c/c++语言的,如果对它有所了解,请简述在android中它的调用过程。

通过jni来调用C/C++

a) Java声明本地接口 add(int x, int y)

b) C 中 实现 add(int x,int y)

c) JNI中 java方法调用C 中的 add(int x,int y),并把结果返回

d) Android 上层显示结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值