Android开发-基本概念小整理(二)为了面试的小伙伴们所准备~~

转载请注明出处:http://blog.csdn.net/iwanghang/article/details/53505926我正在参加CSDN 2016博客之星评选,希望得到您的宝贵一票~http://blog.csdn.net/vote/candidate.html?username=iwanghang请为我投票,谢谢 ~~如果没有CSDN账号 直接使用微信/QQ/微博登陆 就能投票了~~

31. 请描述一下BroadcastReceiver。

BroadcastReceiver用于接收并处理广播通知(broadcast announcements)。多数的广播是系统发起的,如地域变换、电量不足、来电短信等。程序也可以播放一个广播。程序可以有任意数量的broadcast receivers来响应它觉得重要的通知。Broadcast receiver可以通过多种方式通知用户: 启动activity、使用NotificationManager、开启背景灯、振动设备、播放声音等,最典型的是在状态栏显示一个图标,这样用户就可以点它打开看通知内容。通常我们的某个应用或系统本身在某些事件(电池电量不足、来电短信)来临时会广播一个Intent出去,我们利用注册一个broadcastreceiver来监听这些Intent并获取Intent中的数据。

32. 在manifest和代码中如何注册和使用BroadcastReceiver。

在android的manifest中注册<receiver android:="" name="“Receiver1”"> <intent-filter> <!—-和Intent中的action对应—> <actionandroid: name="“com.forrest.action.mybroadcast”/"> </actionandroid:></intent-filter></receiver>1、 IntentFilter filter = new IntentFilter(“com.forrest.action.mybroadcast”);//和广播中Intent的action对应;2、 MyBroadcastReceiver br= new MyBroadcastReceiver();3、 registerReceiver(br, filter);

33.请介绍下ContentProvider是如何实现数据共享的。

一个程序可以通过实现一个Content provider的抽象接口将自己的数据完全暴露出去,而且Content provider是以类似数据库中的表的方式将自己的数据暴露。Content provider存储和检索数据,通过它可以让所有的应用程序访问到,这也是应用程序之间唯一共享数据的方法。要想使应用程序的数据公开化,可通过2种方法:创建一个数据自己的Content Provider或者将你的数据添加到一个已经存在的Content Provider中,前提是有相同数据类型并且有写入Content Provider的权限,Android提供了Content Resolverr,外界的程序可以通过Content Resolver接口访问Content Provider提供的数据。

34.请介绍下Android的数据存储方式。

Android提供了5中存储数据的方式,分别是以下几种:1、使用Shared Preferences存储数据,用来存储key-value,pairs格式的数据,它是一个轻量级的键值存储机制,只可以存储基本数据类型。2、使用文件存储数据,通过FileInputStream和FileOutputStream对文件进行操作。在Android中,文件是一个应用程序私有的,一个应用程序无法读写其他应用程序的文件。3、使用SQLite数据库存储数据,Android提供的一个标准数据库,支持SQL语句。4、使用Content Provider存储数据,是所有应用程序之间数据存储和检索的一个桥梁,它的作用就是使得各个应用程序之间实现数据共享。它是一个特殊的存储数据的类型,它提供了一套标准的接口用来获取数据,操作数据。系统也提供了音频、视频、图像和个人信息等几个常用的Content Provider。如果你想公开自己的私有数据,可以创建自己的Content Provider类,或者当你对这些数据拥有控制写入的权限时,将这些数据添加到Content Provider中实现共享。外部访问通过Content Resolver去访问并操作这些被暴露的数据。5、使用网络存储数据

35.请介绍下Android中常用的五种布局。

最常用的布局方式为Absolute Layout、Relative Layout、Linear Layout、FrameLayout、TableLayout。其中Linear Layout和Relative Layout是最常用的方式,他们可以通过在xml配置文件或者代码中进行布局。1、Frame Layout是最简单的布局方式,放置的控件都只能罗列到左上角,控件会有重叠,不能进行复杂的布局。2、Linear Layout可以通过orientation属性设置线性排列的方向是垂直还是纵向的,每行或每列只有一个元素,可以进行复杂的布局。3、Absolute Layout可以让子元素指定准确的x、y坐标值,并显示在屏幕上。Absolute Layout没有页边框,允许元素之间相互重叠。它是绝对坐标,所以在实际中不提倡使用。4、Relative Layout允许子元素制定他们相对于其他元素或父元素的位置(通过ID制定)。因此,你可以以右对齐,或上下,或置于屏幕中央的形式来排列两个元素。元素按顺序排列,因此如果第一个元素在屏幕的中央,那么相对于这个元素的其他元素将以屏幕中央的相对位置来排列。这个是相对于Absolute Layout的,采用相对坐标,所以在实际中比较常用。5、Table Layout将以子元素的位置分配到行或列。一个Table Layout由许多的Table Row组成,每个Table Row都会定义一个row。Table Layout容器不会显示row、column或者cell的边线框。每个row拥有0个或多个的cell; 和html中的table差不多。在实际中也经常使用。

36.谈谈UI中, Padding和Margin有什么区别?

Padding是控件的内容相对控件的边缘的边距,而Margin是控件边缘相对于其他控件的边距。

37.android本身的一些限制,比如apk包大小限制,读取大文件时的时间限。

apk包大小限制不好说,有的apk为100M,还是能装到手机上。一般的apk大小为5~10M左右。读取大文件的时间应该是在main线程里面,时间限制为5秒左右。

38.ListView如何提高其效率?

1、使用分页加载,不要一次性加载所有数据。2、复用convertView。在getItemView中,判断converView是否为空,如果不为空,可复用。3、异步加载图片。Item中如果包含有webimage,那么最好异步加载。4、快速滑动时,不显示图片。当快速滑动列表(SCROLL_STATE_FLING),item中的图片或获取需要消耗资源的view,可以不显示出来;而处于其他两种状态(SCROLL_STATE_IDLE和SCROLL_STATE_TOUCH_SCROLL),则将那些view显示出来。

39.Android程序与Java程序的区别?

1、执行入口点,Android基于Mainfest.xml配置文件中的intent-filter,Java基于Main2、UI,Android基于Activity,Java基于Frame3、Android基于配置文件,Java不是。4、Android基于组件Activity,Service,Broadcast Receiver,Content Provider,Java不是。

40.谈谈对Android NDK的理解。

android NDK是一套工具,允许Android应用开发者嵌入从C、C++源代码编译来的本地机器代码到各自的应用软件包中。1、 NDK是一系列工具的集合。NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者帮助时巨大的。NDK集成了交叉编辑器,并提供了相应的mk文件隔离CPU、平台、API等差异,开发人员只需要简单修改mk文件(指出“那些文件需要编译”、“编译特性要求”等),就可以创建出so。NDK可以自动将so和Java应用一起打包,极大的减轻了开发人员的打包工作。2、NDK提供了一份稳定、功能有限的API头文件声明。这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、log库(liblog)。

41.谈谈Android的优点和不足之处。

优点:1、android是开源、市场占有率大。2、android能够有丰富的硬件选择。3、android是一款基于Linux平台的开源操作系统,从而避免了专利壁垒,是一款完全免费的只能手机平台。4、由于android是google开发的,因此能够无缝结合Google应用。缺点:1、安全与隐私。手机与互联网紧密联系,个人隐私很难得到保守。

42.Android系统中GC什么情况下会出现内存泄露呢?

导致内存泄露主要的原因是,先前申请了内存空间而忘记了释放。如果程序中存在无用对象的引用,那么这些对象就会驻留内存,消耗内存,因为无法让垃圾回收器GC验证这些对象是否不再需要。如果存在对象的引用,这个对象就被定义为“有效的活动”,同时不会被释放。要确定对象所占内存将被回收,我们就要确认该对象不会再被使用。典型的做法是把对象数据成员设为null或者从集合中移除该对象。当出现以下情况时,会造成内存泄露:1、 数据库的cursor没有关闭。2、 构造adapter时,没有使用缓存contentview。3、 Bitmap对象不使用时,采用recycle()释放内存。4、 Activity中的对象的生命周期大于activity。调试方法: DDMS==>HEAPSIZE==>dataobject==>[TotalSize]

43.Android UI中的View如何刷新。

Android中对View的更新方式有很多种,使用时要区分不同的应用场合。要分清的是:多线程和双缓冲。1、不使用多线程和双缓冲这种情况最简单,一般只希望View在发生改变时对UI进行重绘。你只需要Activity中显式调用View对象中的invalidate()方法即可。系统会自动调用View的onDraw()方法。2、使用多线程和不使用双缓冲这种情况下需要开启新的线程,新开的线程就不好访问View对象了。强行访问的话会报错:android.view.ViewRoot$ CalledFromWrongThreadException: only theoriginal thread that created a view hierarchy can touch its views。这时候你需要创建一个继承了android.os.handler的子类,并重写handleMessage方法。Android.os.Handle是能发送和处理消息的,你需要在Activity中发出更新UI的消息,然后再你的Handler(可以使用匿名内部类)中处理消息(因为匿名内部类可以访问父类变量,你可以直接调用View对象中的invalidate()方法。也就是说:在新线程中创建并发送一个Message,然后在主线程中捕获、处理该消息。3、使用多线程和双缓冲Android的SurfaceView是View的子类,她同时也实现了双缓冲。你可以定义一个她的子类并实现Surfaceholder.Callback接口。由于SurfaceHolder.Callback接口,新线程就不要android.os.Handler帮忙了。SurfaceHolder中lockCanvas()方法可以锁定画布,绘制完新的图像后调用unlockCanvasand Post解锁。

44.对android虚拟机的理解,包括内存管理机制垃圾回收机制。

android虚拟机有dalvik,以及4.4以后出现的ART,这2种。dalvik是执行的时候编译+运行,安装比较快,开启应用比较慢,应用占用空间小。ART是安装的时候就编译好了,执行的时候直接就可以运行的,安装慢,开启应用快,占用空间大。用个比喻来说就是,骑自行车dalvik 是已经折叠起来的自行车,每次骑都要先组装自行车才能骑ART 是已经组装好的自行车,每次骑直接上车就能走人效率高在开启的时候,运行中的速度是差不多的。Android的内存管理,Android的程序由Java语言编写,所以Android的内存管理与Java的内存管理相似。程序员通过new为对象分配内存,所有对象在java堆内分配空间;然而对象的释放是由垃圾回收器来完成的。C/C++中的内存机制是“谁污染,谁治理”,java的就比较人性化了,给我们请了一个专门的清洁工(GC 垃圾回收 GabageCollection)。垃圾回收机制,使得Java程序员在编写程序的时候不再需要考虑内存管理。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。

45.Framework工作方式及原理,Activity是如何生成一个view的,机制是什么。

所有的框架都是基于反射和配置文件(manifest)的。普通情况:Activity创建一个view是通过ondraw画出来的,画这个view之前呢,还会调用onmeasure方法来计算显示的大小。特殊情况:Surfaceview是直接操作硬件的,因为视频播放对帧数有要求,onDraw效率太低,不够使,Surfaceview直接把数据写到显存。转载请注明出处:http://blog.csdn.net/iwanghang/article/details/53505926欢迎移动开发爱好者交流沈阳或周边城市公司有意开发Android,请与我联系联系方式微信:iwanghangQQ:413711276邮箱:iwanghang@qq.com 在开始时却总是不厌其烦地渗透入生活的缝隙,

Android开发-基本概念小整理(二)为了面试的小伙伴们所准备~~

相关文章:

你感兴趣的文章:

标签云: