Android 基础知识面试

Android面试 PDF 合集

1、简述十个常用的linux 命令

mkdir 创建文件夹
rm -r 删除 文件 及文件夹
mv 移动
cp 拷贝
cat 拷贝文件
tail 查看文件尾部
more 分页查看文件
ls 列出文件清单
reboot 重启
date 显示日期
cal 显示日历
ps 查看系统进程
ifconfig 查看网络配置
vim 编辑文本

2、说出几个Android 工程目录

src 源文件
gen 生成的 R 文件就在次
android.jar 以来的 Android sdk
assets 资源文件
bin 生成的字节码 apk 在此
libs 依赖的jar 和so
res 资源文件
drawable
layout
menu
values
AndroidManifest.xml
project.properties

3、什么是 Anr 以及如何避免?

在 Android 上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应 用程序无响应(ANR:Application Not Responding)对话框。用户可以选择让程序继续运行,但是,他们在使用你 的应用程序时,并不希望每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样,系统不会显示 ANR 给用户。 不同的组件发生 ANR 的时间不一样,主线程(Activity、Service)是 5 秒,BroadCastReceiver 是 10 秒。
解决方案:
将所有耗时操作,比如访问网络,Socket 通信,查询大量 SQL 语句,复杂逻辑计算等都放在子线程中去,然后 通过 handler.sendMessage、runonUITread、AsyncTask 等方式更新 UI。无论如何都要确保用户界面操作的流畅度。 如果耗时操作需要让用户等待,那么可以在界面上显示进度条。

4、android 的优点和不足
  1. 优点

(1)、开放性,开源,免费,可定制
(2)、挣脱运营商束缚
(3)、丰富的硬件选择
(4)、不受任何限制的开发商
(5)、无缝结合的 Google 应用

2) 缺点:
(1)、安全问题、隐私问题
(2)、同质化严重
(3)、运营商对 Android 手机仍然有影响
(4)、山寨化严重
(5)、过分依赖开发商,缺乏标准配置

5、如何判断 是否含有 SD 卡?

通过如下方法: Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) 如果返回 true 就是有 sdcard,如果返回 false 则没有。

6、dvm 的进程和 Linux 的进程, 应用程序的进程是否为同一个概念?

dvm 指 dalvik 的虚拟机。每一个 Android 应用程序都拥有一个独立的 Dalvik 虚拟机实例,应用程序都在它自己的 进程中运行。而每一个 dvm 都是在 Linux 中的一个进程,所以说可以近似认为是同一个概念。

7、什么是 android DVM?

dvm 指 dalvik 的虚拟机,Dalvik 是 Google 公司自己设计用于 Android 平台的 Java 虚拟机,每一个 Dalvik 应用作 为一个独立的 Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭

8、Dalvik 和 Java 虚拟机的区别 ?

1) Dalvik 主要是完成对象生命周期管理,堆栈管理,线程管理,安全和异常管理,以及垃圾回收等等重要功能。
2):Dalvik 负责进程隔离和线程管理,每一个 Android 应用在底层都会对应一个独立的 Dalvik 虚拟机实例,其代 码在虚拟机的解释下得以执行。
3)不同于 Java 虚拟机运行 java 字节码,Dalvik 虚拟机运行的是其专有的文件格式 Dex。
4)dex 文件格式可以减少整体文件尺寸,提高 I/O 操作的类查找速度。
5)odex 是为了在运行过程中进一步提高性能,对 dex。
6):所有的 Android 应用的线程都对应一个 Linux 线程,虚拟机因而可以更多的依赖操作系统的线程调度和管理 机制。
7):有一个特殊的虚拟机进程 Zygote,他是虚拟机实例的孵化器。它在系统启动的时候就会产生,它会完成虚拟 机的初始化,库的加载,预制类库和初始化的操作。如果系统需要一个新的虚拟机实例,它会迅速复制自身,以最快 的数据提供给系统。对于一些只读的系统库,所有虚拟机实例都和 Zygote 共享一块内存区域。

9、Android 程序与 Java 程序的区别?

Android 程序用 android sdk 开发,java 程序用 java sdk 开发。
Android SDK 引用了大部分的 Java SDK,少数部分被 Android SDK 抛弃,比如说界面部分,java.awt swing package 除了 java.awt.font 被引用外,其他都被抛弃,在 Android 平台开发中不能使用。android sdk 添加工具 jar httpclient , pull opengl。

10、启动应用后,改变系统语言,应用的语言会改变么?

这个一般是不会的,一般需要重启应用才能改变应用语言。但是对应应用来说如果做了国际化处理则支持如果没 有处理那系统语言再更改也是无用的。

11、Android 中数据存储方式有哪些?

a) 文件存储
b) xml,SharedPreference
c) SQLiteDatabase
d) ContentProvider
e) 网络

12、DVM 和 JVM 的区别?

a) dvm 执行的是.dex 文件,而 jvm 执行的是.class。Android 工程编译后的所有.class 字节码会被 dex 工具抽 取到一个.dex 文件中。
b) dvm 是基于寄存器的虚拟机 而 jvm 执行是基于虚拟栈的虚拟机。寄存器存取速度比栈快的多,dvm 可以根 据硬件实现最大的优化,比较适合移动设备。
c) .class 文件存在很多的冗余信息,dex 工具会去除冗余信息,并把所有的.class 文件整合到.dex 文件中。减少 了 I/O 操作,提高了类的查找速度。

13、谈一谈 Android 的安全机制

1)Android 是基于 Linux 内核的,因此 Linux 对文件权限的控制同样适用于 Android 在 Android 中每个应用都有自己的/data/data/包名 文件夹,该文件夹只能该应用访问,而其他应用则无权 访问。
2)Android 的权限机制保护了用户的合法权益 如果我们的代码想拨打电话、发送短信、访问通信录、定位、访问 sdcard 等所有可能侵犯用于权益的行为都 是必须要在 AndroidManifest.xml 中进行声明的,这样就给了用户一个知情权。
3) Android 的代码混淆保护了开发者的劳动成果

14、Android 的四大组件都需要在清单文件中注册吗?

Activity 、 Service 、 ContentProvider 如 果 要 使 用 则 必 须 在 AndroidManifest.xml 中 进 行 注 册 , 而 BroadcastReceiver 则有两种注册方式,静态注册和动态注册。其中静态注册就是指在 AndroidManifest.xml 中进行注册,而动态注册时通过代码注册。

15、简述activity 生命周期

Activity 从创建到销毁有多种状态,从一种状态到另一种状态时会激发相应的回调方法,这些回调方法包括: onCreate onStart onResume onPause onStop onDestroy 其实这些方法都是两两对应的,onCreate 创建与 onDestroy 销毁; onStart 可见与 onStop 不可见;onResume 可编辑(即焦点)与 onPause;
这 6 个方法是相对应的,那么就只剩下一个 onRestart 方法了,这个方法在什么时候调用呢?

答案就是:在 Activity 被 onStop 后,但是没有被 onDestroy,在再次启动此 Activity 时就调用 onRestart(而 不再调用 onCreate)方法; 如果被 onDestroy 了,则是调用 onCreate 方法。

16、横竖屏切换时 Activity

此时的生命周期跟清单文件里的配置有关系。 1)、不设置 Activity 的 android:configChanges 时,切屏会重新调用各个生命周期 默认首先销毁当前 activity,然后重新加载。
如下图,当横竖屏切换时先执行 onPause/onStop 方法
在这里插入图片描述

2)、设置 Activity 的 android:configChanges="orientation|keyboardHidden|screenSize"时,切屏不会重新调 用各个生命周期,只会执行 onConfigurationChanged 方法。 通常在游戏开发, 屏幕的朝向都是写死的。

17、如何将一个 Activity 设置成窗口的样式?

只需要给我们的 Activity 配置如下属性即可。 android:theme="@android:style/Theme.Dialog"

18、请描述一下 Activity 的启动模式都有哪些以及各自的特点

启动模式(launchMode)在多个 Activity 跳转的过程中扮演着重要的角色,它可以决定是否生成新的 Activity 实例, 是否重用已存在的 Activity 实例,是否和其他 Activity 实例公用一个 task 里。这里简单介绍一下 task 的概念,task 是 一个具有栈结构的对象,一个 task 可以管理多个 Activity,启动一个应用,也就创建一个与之对应的 task。 Activity 一共有以下四种 launchMode: 1).standard
2).singleTop
3).singleTask
4).singleInstance

19、、两个 Activity 之间传递数据,除了 intent,广播接收者,content provider 还有啥 方式?

1)利用 static 静态数据,public static 成员变量
2)利用外部存储的传输,
例如 File 文件存储
SharedPreferences 首选项
Sqlite 数据库
3)如果不夸进程,可以使用 EventBus
4)使用剪切板传递数据

20、怎样在两个 Activity 之间传递一张图片

a) Intent 可以传递基本数据类型、Uri 和序列化对象
b) Bitmap 对象实现了 Parcelable 序列化接口,但是不建议放到 Intent 里传递。因为 Pacelable 对象序列化过 程是将对象 A 的属性暂存一份到内存里,反序列化时再使用暂存的数据,创建一个属性完全相同的对象 B。
c) 对于 Bitmap 而言,就是把图片的二进制数据 0 复制一份到内存里构成二进制数据 1,反序列化时根据二进 制数据 1 创建 Bitmap 对象,此时会生成二进制数据 2。也就是同一个图片的数据在内存里存放了三份。
d) 也就是说把 Bitmap 放到 Intent 里会导致巨大的内存损耗,所以在传递图片时应该是传递 URI 地址,新界面 根据 URI 生成新图片。同时还可以到图片缓存里使用 URI 查找已有图片,节约内存。

21、使用权重如何让一个控件的宽度为父控件的 1/3?

可以在水平方向的 LinearLayout 中设置 weightSum 为 3 ,然后让其子控件的 weight 为 1,那么该子控件就是 父控件的 1/3。

22、在 Android 中如何调用 C 语言?

当我们的 Java 需要调用 C 语言的时候可以通过 JNI 的方式,Java Native Interface。Android 提供了对 JNI 的支 持,因此我们在 Android 中可以使用 JNI 调用 C 语言。在 Android 开发目录的 libs 目录下添加 xxx.so 文件,不过 xxx.so 文件需要放在对应的 CPU 架构名目录下,比如 armeabi,x86 等。 在 Java 代码需要通过 System.loadLibrary(libName);加载 so 文件。同时 C 语言中的方法在 java 中必须 以 native 关键字来声明。普通 Java 方法调用这个 native 方法接口,虚拟机内部自动调用 so 文件中对应的方法。

23、

待续····

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值