⑴ android 面试题
1、前言
6 月 26 日, Google Android 发布了 NDK ,引起了很多发人员的兴趣。 NDK 全
称: Native Development Kit 。下载地址为:
http://developer.android.com/sdk/ndk/1.5_r1/index.html 。
2、误解
新出生的事物,除了惊喜外,也会给我们带来一定的迷惑、误解。
2.1、误解一: NDK 发布之前, Android 不支持进行 C 开发
在 Google 中搜索 “NDK” ,很多 “Android 终于可以使用 C++ 开发 ” 之类
的标题,这是一种对 Android 平台编程方式的误解。其实, Android 平台从诞生起,就已
经支持 C 、 C++ 开发。众所周知, Android 的 SDK 基于 java 实现, 这意味着基于 Android
SDK 进行开发的第三方应用都必须使用 Java 语言。但这并不等同于 “ 第三方应用只能使
用 Java” 。在 Android SDK 首次发布时, Google 就宣称其虚拟机 Dalvik 支持 JNI 编程
方式,也就是第三方应用完全可以通过 JNI 调用自己的 C 动态库,即在 Android 平台上,
“Java+C” 的编程方式是一直都可以实现的。
当然这种误解的产生是有根源的:在 Android SDK 文档里,找不到任何 JNI 方面的
帮助。即使第三方应用开发者使用 JNI 完成了自己的 C 动态链接库( so )开发,但是 so
如何和应用程序一起打包成 apk 并发布?这里面也存在技术障碍。我曾经花了不少时间,
安装交叉编译器创建 so ,并通过 asset (资源)方式,实现捆绑 so 发布。但这种方式只
能属于取巧的方式,并非官方支持。所以,在 NDK 出来之前,我们将 “Java+C” 的开发
模式称之为灰色模式,即官方既不声明 “ 支持这种方式 ” ,也不声明 “ 不支持这种方
式 ” 。
2.2、误解二:有了 NDK ,我们可以使用纯 C 开发 Android 应用
Android SDK 采用 Java 语言发布,把众多的 C 开发人员排除在第三方应用开发外
( 注意:我们所有讨论都是基于“ 第三方应用开发 ” , Android 系统基于 linux ,系
统级别的开发肯定是支持 C 语言的。 )。 NDK 的发布,许多人会误以为,类似于 Symbian 、
WM ,在 Android 平台上终于可以使用纯 C 、 C++ 开发第三方应用了!其实不然, NDK
文档明确说明: it is not a good way 。因为 NDK 并没有提供各种系统事件处理支持,也没
有提供应用程序生命周期维护。此外,在本次发布的 NDK 中,应用程序 UI 方面的 API 也
没有提供。至少目前来说,使用纯 C 、 C++ 开发一个完整应用的条件还不完备。
3、NDK 是什么
对 NDK 进行了粗略的研究后,我对 “NDK 是什么 ” 的理解如下:
1、NDK 是一系列工具的集合。
NDK 提供了一系列的工具,帮助开发者快速开发 C (或 C++ )的动态库,并能自动
将 so 和 java 应用一起打包成 apk 。这些工具对开发者的帮助是巨大的。
NDK 集成了交叉编译器,并提供了相应的 mk 文件隔离 CPU 、平台、 ABI 等差异,
开发人员只需要简单修改 mk 文件(指出 “ 哪些文件需要编译 ” 、 “ 编译特性要求 ”
等),就可以创建出 so 。
NDK 可以自动地将 so 和 Java 应用一起打包,极大地减轻了开发人员的打包工作。
2、NDK 提供了一份稳定、功能有限的 API 头文件声明。
oogle 明确声明该 API 是稳定的,在后续所有版本中都稳定支持当前发布的 API 。
从该版本的 NDK 中看出,这些 API 支持的功能非常有限,包含有: C 标准库( libc )、
标准数学库( libm )、压缩库( libz )、 Log 库( liblog )。
G
4、NDK 带来什么
1、NDK 的发布,使 “Java+C” 的开发方式终于转正,成为官方支持的开发方式。
使用 NDK ,我们可以将要求高性能的应用逻辑使用 C 开发,从而提高应用程序的执
行效率。
使用 NDK ,我们可以将需要保密的应用逻辑使用 C 开发。毕竟, Java 包都是可以反
编译的。
NDK 促使专业 so 组件商的出现。(乐观猜想,要视乎 Android 用户的数量)
2、NDK 将是 Android 平台支持 C 开发的开端。
NDK 提供了的开发工具集合,使开发人员可以便捷地开发、发布 C 组件。同时,
Google 承诺在 NDK 后续版本中提高 “ 可调式 ” 能力,即提供远程的 gdb 工具,使我
们可以便捷地调试 C 源码。在支持 Android 平台 C 开发,我们能感觉到 Google 花费了
很大精力,我们有理由憧憬 “C 组件支持 ” 只是 Google Android 平台上 C 开发的开端。
毕竟, C 程序员仍然是码农阵营中的绝对主力,将这部分人排除在 Android 应用开发之外,
显然是不利于 Android 平台繁荣昌盛的。
⑵ Android面试题一道
面介绍一下RelativeLayout用到的一些重要的属性: 第一类:属性值为true或false android:layout_centerHrizontal 水平居中 android:layout_centerVertical 垂直居中 android:layout_centerInparent 相对于父元素完全居中 android:layout_alignPar..
⑶ android 面试,算法题。
final int size = data.length;
for(int i = 0; i< size; i++){
if(data[i] == 0xffffffff)
data[i] = 0x80ffffff;
}
不知道你是不是这个意思。
⑷ android 面试会问java基础吗
不一定,不过本身android就是基于java开发出来的,大部分公司都会既问java又问android。有的地方是没有android方面的人才那就会主要问你java的知识点。你可以上网上搜一些java面试题和android面试题,看看对你会很有帮助的,如何你运气好的话有可能会搜到面试题哦~~
⑸ 安卓开发做哪些性能优化,面试题
了解Aide开发源代码
⑹ java和android的区别 面试题
两者的区别:
1. Android是一个完备的移动装备操纵体系,由linux操纵体系,中间件,C类库和焦点应用措施构成。
2. java Me是java的一个微型版本,针对移动装备开拓应用措施的开拓包,它必需有底层操纵体系支持。
两者的接洽:
1. 都是用java说话编写应用措施。
各自的上风:
1. Android的上风在于开拓性和开源,是一个优越的移动装备操纵体系。
2. Java Me 是一个移动装备软件开拓包,跨平台是其首要特点。
⑺ Android面试遇到这样的问题该怎样回答
面试题
面试官:“ 我给你出一道非常简单的题,不算技术题,是这样的:你给我在玻璃板上画一幅画,场景是这样的,有一颗树,树上有三个苹果,树下面有一片草,非常简单吧,好了你画吧。”
遇到这样的问题,你会怎么做呢?
我当时毫不犹豫的就随手画出来了,随便花了一棵树,树上挂着三个苹果,树下面画了一些草。
面试官评论
面试官:这么模糊和简单的需求你都给画出来了,你怎么不问我树是什么树,长什么样,苹果是什么样的苹果,草又是什么草呢?你画的不是我想要的,是不是得重新返工呢?
经验总结
其实这道题考的就是作为一个开发者要善于找到需求中的不足,并提出来,让需求更完善,再去做,这样做出来的东西才是客户想要的,才不会经常返工或重做。
⑻ android布局面试题
面介绍一下RelativeLayout用到的一些重要的属性:
第一类:属性值为true或false
android:layout_centerHrizontal 水平居中
android:layout_centerVertical 垂直居中
android:layout_centerInparent 相对于父元素完全居中
android:layout_alignParentBottom 贴紧父元素的下边缘
android:layout_alignParentLeft 贴紧父元素的左边缘
android:layout_alignParentRight 贴紧父元素的右边缘
android:layout_alignParentTop 贴紧父元素的上边缘
android:layout_alignWithParentIfMissing 如果对应的兄弟元素找不到的话就以父元素做参照物
第二类:属性值必须为id的引用名“@id/id-name”
android:layout_below 在某元素的下方
android:layout_above 在某元素的的上方
android:layout_toLeftOf 在某元素的左边
android:layout_toRightOf 在某元素的右边
android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐
android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐
android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐
android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐
第三类:属性值为具体的像素值,如30dip,40px
android:layout_marginBottom 离某元素底边缘的距离
android:layout_marginLeft 离某元素左边缘的距离
android:layout_marginRight 离某元素右边缘的距离
android:layout_marginTop 离某元素上边缘的距离
你搞明白这些属性就很容易做到了。
⑼ Android开发面试题:Drawable、Bitmap、Canvas和Paint的关系
Bitmap - 称作位图,一般位图的文件格式后缀为bmp,当然编码器也有很多如RGB565、RGB888。作为一种逐像素的显示对象执行效率高,但是缺点也很明显存储效率低。我们理解为一种存储对象比较好。
Drawable - 作为Android平下通用的图形对象,它可以装载常用格式的图像,比如GIF、PNG、JPG,当然也支持BMP,当然还提供一些高级的可视化对象,比如渐变、图形等。
转换Bitmap to Drawable
Java代码 收藏代码
BitmapDrawable bitmapDrawable = (BitmapDrawable)bitmap;
Drawable drawable = (Drawable)bitmapDrawable;
Bitmap bitmap = new Bitmap (...);
Drawable drawable = new BitmapDrawable(bitmap);
转换Drawable to Bitmap
Java代码
Drawable d = ImagesList.get(0);
Bitmap bitmap = ((BitmapDrawable)d).getBitmap();
⑽ Android一小面试题求解
4.onStop() 只是使activity处于停止状态,比如从activityA 跳到activityB,这时候A处于 onStop()
正常的结束activity的方法
特殊情况时退出方法,可使用重写application的方式屏蔽掉错误提示对话框,实现退出效果
java的结束进程的方法,也可以用来结束当前activity