ACCESS[ 面试题 ] 常见题

View部分

================================================

  1. ###### Android自定义组件实现思路

帧布局(框架布局)FrameLayout,在这多少个布局中,所有的子元素统统放于这块区域的左上角,并且后边的子元素直接覆盖在前面的子元素之上,将前方的子元素部分和一切挡住。
线性布局LinearLayout,最常用的一种布局格局,所有子控件的对齐形式,取决于怎么样定义
orientation的属性:vertical 垂直方向
,假若依据这种倾向有着的子控件将依据垂直的形式分布在布局上,每行只同意有一个子元素,horizontal水平方向
,这时子控件将会以水平的可行性分布在布局中。
相对布局AbsoluteLayout,又有何不可称作坐标布局,可以一向指定子元素的断然地方,这种布局简单直接,直观性强,然则出于手机屏幕尺寸差异相比大,使用相对化定位的适应性会相比差。
相对布局RelativeLayout,允许子元素指定它们相对于其父元素或兄弟元素的岗位,这是事实上布局中最常用的布局情势之一。它灵活性大过多,当然属性也多,操作难度也大,属性之间时有暴发争论的的可能也大,使用相对布局时要多做些测试。
报表布局TableLayout,表格布局TableLayout以行列的样式管理子元素,每一行是一个TableRow布局对象,当然也可以是一般的View对象,TableRow里每放一个要素就是一列,总列数由列数最多的那一行决定。
网格布局 GridLayout,在Android
4.0中,新引入的GridLayout网格布局,GridLayout布局使用虚细线将布局划分为行,列和单元格,也支撑一个控件在行,列上都有纵横排列。而GridLayout使用的莫过于是跟LinearLayout类似的API,只可是是修改了一晃相关的标签而已,所以对于开发者来说,理解GridLayout依旧很容易的工作。

  • ###### UI中padding和margin的区别

Padding 用来指定组件内的情节距离组件边界的相距;
Margin用来指定控件与控件之间的离开

  • ###### 哪个组件可以实现手风琴效果,用来贯彻设置界面的类,实现抽屉效果, 悬浮窗口?

答:实现手风琴效果(ExpandableListView)
设置界面的类(preferenceActivity)保存到sharedpreference中
抽屉效果(slidingDrawer)组件
浮动窗口: PopWindow,可以兑现类似Dialog和菜单的效率

  • ###### gravity与layout_gravity的区别

Gravity用来指定组件内的情节相对于组件本身的职位
Layout_gravity用来指定组件相对于其父组件的岗位

  • ###### 如何自定义一个艾达pter

后续自BaseAdapter实现里面的不二法门,listView在始发绘制的时候,系统第一调用getCount()函数,依据她的回来值得到listView的尺寸,然后依据这几个尺寸,调用getView()逐一绘制每一行。假诺你的getCount()重回值是0的话,列表将不显得同一return
1,就只显示一行。系统显示列表时,首先实例化一个适配器(那里将实例化自定义的适配器)。当手动完成适配时,必
须手动映射数据,这亟需重写getView()方法。系统在绘制列表的每一行的时候将调用此方法。getView()有两个参数,position表示将显得的是第几行,covertView是从布局文件中inflate来的
布局。我们用LayoutInflater的方法将概念好的main.xml文件提取成View实例用来显示。然后
将xml文件中的各种零部件实例化(简单的findViewById()方法)。那样便可以将数据对应到各种零部件上了。不过按钮为了响应点击事件,需要为它添加点击监听器,这样就能捕获点击事件。至此一个自定
义的listView就完了了,现在让我们回过头从新审视这些进程。系统要绘制ListView了,他先是拿到要绘制的这个列表的长度,然后起先绘制第一行,怎么绘制呢?调用getView()函数。在这些函数里面
首先得到一个View(实际上是一个ViewGroup),然后再实例并设置各类零部件,显示之。好了,绘制完这一行了。这再绘制下一行,直到绘完停止。在其实的运作过程中会发现listView的每一行没有典型了,这是因为Button抢夺了listView的要点,只要布局文件少将Button设置为没有典型就OK了

  • ###### ViewFlipper和ViewPager的区别

1.ViewFilpper类继承于ViewAnimator类。而ViewAnimator类继承于FrameLayout。
翻看ViewAnimator类的源码能够看看此类的效益紧假诺为内部的View切换提供动画效果。该类有如下多少个和动画相关的法门。
2.ViewPager用于贯彻多页面的切换效果,该类存在于谷歌的兼容包里面,所以在引用时记得在BuilldPath中进入“android-support-v4.jar”

  • ###### View更新页面的五种办法

Activity.runOnUiThread(Runnable)
View.post(Runnable)
View.postDelayed(Runnable,long);
View.postInvalidate();
View.Invalidate();
在需要刷新的地方调用handle的sendMessage来发送音讯,然后在handle的getMessage里执行
invaliate 或 postinvaliate

  • ###### 如何依据权重实现布局

//权重和父容器orientation有关
horizontal 指水平方向权重 android:layout_width
vertical 指垂直方向权重 android:layout_height
Layout_weight是线性布局,也就是LinearLayout里面用到的
在layout_width设置为fill_parent的时候,layout_weight代表的是您的控件要先行尽可能的大,但尽量大是有限度的,即fill_parent.
在layout_width设置为wrap_content的时候,layout_weight代表的是你的控件要先行尽可能的小,但以此小是有限度的,即wrap_content.

  • ###### 怎么样兑现ViewPager

先在布局文件中调用v4包下的ViewPager,在java代码中开头化ViewPager,并安装adapter(继承Pager艾达(Ada)pter),再设置监听onPageChangeListener

  • ###### SurfaceView实现的规律

SurfaceView,它拥有独立的绘图表面,即它不与其宿主窗口共享同一个制图表面。由于拥有独立的绘图表面,因而SurfaceView的UI就足以在一个独门的线程中展开行绘制。又由于不占用主线程资源,SurfaceView一方面可以兑现复杂而高速的UI,另一方面又不会导致用户输入得不到当下响应

  • ###### PathImage是什么

.9.PNG是安卓开发里面的一种特此外图纸,这种格式的图纸通过ADT自带的编写工具生成,使用九宫格切分的措施,使图片辅助在android
环境下的自适应映现。

不畏异步下载图片的时候把图片添加到scrollview中,
你需要几列就在scrollview中放置多少个linearlayout,在scrollview滑动的的时候动态的测量linearlayout随机生成linearlayout的冲天

音视频

================================================

  1. ###### 简述音乐广播的情势与区别?

1):MediaPlayer:紧要用以广播音频,可以播放视频,不过一般不用其开展录像播放。
2):SoundPool:
首要用于广播一些短命的声响有些,首要优势是cpu资源占有量低,反应延迟小。

  • ###### 播放录像的实现情势

1)使用系统自带的播放器来播音,指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型。
//调用系统自带的播放器
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, “video/mp4”);
startActivity(intent);
2)使用VideoView组件来播放, 可以构成MediaController来实现播控,
只是不可能随便改动视频的轻重及职务。
3)使用MediaPlayer和SurfaceView来兑现,这种办法很灵敏,可以自定义视频播放的大大小小和职务。

其他

================================================

  1. ###### 工作中哪些利用线程池的?

Java通过Executors提供四种线程池,分别为:
1)newCachedThreadPool创制一个可缓存线程池,假使线程池长度领先处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
2)newFixedThreadPool
创立一个定长线程池,可决定线程最大并发数,超出的线程会在队列中等待。
3)newScheduledThreadPool
创立一个定长线程池,协助定时及周期性任务执行。
4)newSingleThreadExecutor
创造一个单线程化的线程池,它只会用唯一的办事线程来进行任务,保证拥有任务遵照指定顺序(FIFO,
LIFO, 优先级)执行。

1.throw则是指抛出的一个切实的百般类型。
2.平淡无奇在一个格局(类)的表明处通过throws声明方法(类)可能抛出的要命音信,而在模式(类)内部通过throw讲明一个现实的不行消息。
3.throws普普通通并非展现的破获非常,可由系统活动将有着捕获的十分信息抛给上级方法;
throw则需要用户自己捕获相关的不胜,而后在对其展开相关包装,最后在将包装后的百般消息抛出。
假如在措施中会有非凡被抛出而你又不期待在这一个法子体内对此丰裕举行处理,可以利用throws在宣称方法的时候还要申明他恐怕会跑出的不得了。
4.两者地方不同.

  • ###### 如何将SQLite数据库(dictionary.db文件)与apk文件一起发布?

解答:可以将dictionary.db文件复制到Eclipse Android工程中的res
aw目录中。所有在res
aw目录中的文件不会被缩减,这样可以直接领取该目录中的文件。能够将dictionary.db文件复制到res
aw目录中

  • ###### 通过Intent传递一些二进制数据的格局有什么样?

A.使用Serializable接口实现连串化,这是java常用的办法
B.实现Parcelable接口,这里Andriod的片段分类比如Bitmap类就早已落实了,同时Parcelable在Android
AIDL中互换数据也很广泛

  • ###### 怎么样把一个字符串转换成URI?

uri uri=uri.parse("content://com.changcheng.provider.contactprovider/contact")

  • ###### SIM卡的EF文件有何意义?

    SIM卡的文件系统有投机的正规,重假若为着和手机通讯,SIM本身可以有自己的操作系

  • ###### Android中项目升级注意的题材

在清单文件之中的android:versionCode和android:versionName有版本文件,
客户端同时储存该行使当前版本号 (SharedPreferences/Sqlite),
每一回打开应用,去检测服务器版本号与本地版本号是否同样,如若不一
致,则自定义对话框指示是否下载更新

  • ###### 咋样促成消息推送,有什么样方法,各自优缺点,最常使用哪一种?

答:实现音讯推送的措施有五种,分别是轮询,SMS,C2DM,MQTT,XMPP最常使用的是XMPP,
我们做项目时使用的是XMPP协议
1.XMPP协议,它是一种基于XML的传递协议,具有很强的灵活性和可扩大性。它的特性是将复杂从客户端转换来了服务器端。GTalk、QQ、IM等都用这多少个协议。
2.轮询:客户端定时去服务端取或者保持一个长Socket,从精神讲这一个不叫推送,
而是去服务端拽数据。不过实现简单,紧要症结:耗电,浪费用户流量等
3.Google的C2DM,具体不细说,缺点,服务器在海外,不是很平稳。
4.透过短信模式, 不过很难找到免费短信平台
5.MQTT协议, IBM提供的一种推送服务,不太灵敏

  • ###### 怎么样支配耗电量

【在偏下情形下耗电相比多:】
1、 大数据量的传导。
2、 不停的在网络间切换。
3、 解析大量的文件数据。
【控制耗电量:】
1、
在需要网络连接的次序中,首先检查网络连接是否正规,假如没有网络连接,那么就不需要实施相应的先后。
2、 使用功能高的多少格式和分析方法。(fastJson,LoganSquare-master)
3、使用GZIP压缩格局下载数据,能压缩网络流量
4、 其余一些优化措施:A. 回收java对象,特别是较大的java对像;
B.对稳定要求不是太高的话尽量不要接纳GPS定位,可能使用wifi和移动网络cell定位即可,GPS定位消耗的电量远远超出运动网络稳定;
C.尽量不要采纳浮点运算;
D.获取屏幕尺寸等信息方可拔取缓存技术,不需要开展频繁呼吁。

  • ###### Gps定位和网络稳定的界别

GPS定位需安装权限android.permission.ACCESS_LOCATION_FINE
网络稳定需安装权限android.permission.ACCESS_LOCATION_COARSE
即GPS定位比网络稳定在精确度方面更精准,但在进度方面稍差一些,而且GPS定位相符在户外条件下拔取,网络稳定在室内,室外都得以。

  • ###### 安卓的系统架构

详尽链接
应用层:使用Java语言举行开发的有些应用程序
拔取框架层:紧如果谷歌颁发的片段操作协助的类库(API框架),开发人士可以行使这个类库方便的开展程序支付,不过在开发时必须遵守框架的开发规范
系统运转库层:当使用安卓框架层开展付出时,安卓操作系统会活动使用一些c/c++的库文件来援助所拔取的逐一零部件,使其得以更好的为顺序服务;
Linux内核层:安卓操作系统重假如基于Linux内核,程序的安全性,驱动程序,进程管理等都由Linux内核提供。

  • ###### 安卓上设置了两个浏览器,能否指定页面访问;

经过平素发送URI把参数带过去,或者通过Manifest里的intentfilter的data属性

  • ###### Android dvm的进程和Linux的经过, 应用程序的经过是否为同一个定义?

DVM指dalivk的虚拟机。每一个Android应用程序都在它自己的进程中运作,都享有一个独立的Dalvik虚拟机实例。而每一个DVM都是在Linux
中的一个历程,所以说可以认为是同一个定义。

  • ###### 依照自己的明亮描述下Android数字签名。

(1)所有的应用程序都不可能不有数字证书,Android系统不会设置一个从未有过数字证书的应用程序
(2)Android程序包使用的数字证书可以是自签定的,不需要一个高贵的数字证书机构签署认证
(3)如若要正式颁发一个Android程序,必须采取一个适中的私钥生成的数字证书来给程序签名,而无法动用adt插件或者ant工具生成的调试证书来发表。
(4)数字证书都是有有效期的,Android只是在应用程序安装的时候才会检讨注脚的有效期。假设程序已经设置在系统中,尽管证书过期也不会影响程序的正规效用。

答:
客户端缓存机制是android应用开发中这多少个关键的一项工作,使用缓存机制不仅可以为用户节省3G流量,同时在用户体验方面也是这些好的采纳,比如有些情报客户端扶助离线情势,也是因此缓存机制落实的.缓存机制分为两片段,一部分是文字缓存,另一部分是多媒体文件缓存.
文字缓存有二种实现:
1)可以将与服务器交互得到的json数据如故xml数据存入sd卡中,并在数据库添加该数量的记录.添加数据库记录时,提供六个基本点字段,一个是呼吁的URL,另一个则是本地保存后的文本地点,每一趟加载数据以前都会按照URL在数据库中找寻
2)将JSON数据解析后装入List<Map>对象中,然后遍历List,将数据统统写入相应的数目库表结构中,将来每一遍向服务器发起呼吁往日可以先在数据库中找找,假设有平昔重返.
多媒体文件缓存:首要指图片缓存
图表的缓存可以遵照而前几天期,时间为名字缓存到SD卡中的指定图片缓存目录,同时数据库中做相应记录,记录格局可以使用四个至关紧要字段控制,一个字段是该图片的URL地址,另一个字段是该图形的本机地址.取图片时按照URL在数码中找寻,假诺没有则连接服务器下载,下载之后再服务器中作出相应记录
缓存文件删除策略:
1.每一个模块在历次客户端自动或者用户手动更新的时候删除相应模块的缓存文件,人己一视复下载新的缓存文件.
2.在安装界面中提供删除缓存的效能,点击后删除本机所有缓存.

  • ###### Ddms和Traceview的区别

DDMS是一个程序执行查看器,在其中可以望见线程和库房等信息,TraceView是程序性能分析器

  • ###### 程序之间的亲和性的精晓

1.默认意况下一个采取的具备Activity都是兼具同样的affinity,都是从application中连续,application的affinity默认就是manifest的包名。
2.affinity对Activity来说,就像是身份证相同,可以告知所在的Task,自己属于内部的一员。
3.应用场所:
a:按照affinity重新为Activity选拔适当的宿主Task;
b:与allowTaskReparenting属性配合;
c:启动Activity使用Intent设置了FLAG_ACTIVITY_NEW_TASK标记。

API(Application Programming
Interface,应用程序编程接口)是局部预先定义的函数,目标是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的力量,而又无需访问源码,或领悟其中工作机制的细节.
简易的话,就是一套可供调用的系统接口.

  • ###### Android项目标目录结构

1)src目录:src(即SourceCode),src目录用来存放在应用程序中颇具的源代码,代码的源文件一般存放在该目录下的呼应的包下。
2)gen目录:gen目录,该目录下一般只有一个文件,即R文件。该公文夹上面有个R.java文件,R.java是在确立项目时自动生成的,定义该品种具有资源的目录。
3)Android4.1目录:该文件夹下包含android.jar文件,这是一个Java归档文件,其中涵盖构建应用程序所需的持有的AndroidSDK库(如Views、Controls)和APIs。
通过android.jar将团结的应用程序绑定到AndroidSDK和AndroidEmulator,那允许你使用具有Android的库和包,且使你的应用程序在适用的条件中调剂。
4)assets目录:该目录存放应用程序中使用的外表资源文件,如声音视频等,在Android程序中得以由此输入/输出流对该目录中的文件举办读写。
5)res目录:该目录用来存放程序这用到的图形、界面布局文件及XML格式的叙说文件。该目录下有多少个目录。新建一Android品种,在res目录下一般会有drawable,layout,valuse四个目录。drawable用来存放图片资源,目录下一般会有多少个目录分别寄存高中低两种不同分辨率的图片,layout目录用来存放在应用程序的界面布局文件,values目录下存放字符串资源,颜色资源,数组资源等XML文件。
6)AndroidManifest.xml

  • ###### Manifest中放怎么事物

AndroidManifest.xml是各类android程序中务必的文书。它身处整个项指标根目录,描述了package中展露的零部件(activities,services,等等),他们各自的实现类,各个能被拍卖的数据和开行地点。除了能宣称程序中的Activities,ContentProviders,瑟维斯(Service)(Service)s,和IntentReceivers,还是可以指定permissions和instrumentation(安全控制和测试),四大组件,意图,权限,第三方key,版本号等

  • ###### Application类的效率

Application和Actovotu,Service一样是android框架的一个系统组件,当android程序启动时系统会创立一个
application对象,用来储存系统的一部分信息。平日我们是不需要指定一个Application的,这时系统会自行帮我们制造,如果需要制造和谐
的Application,也很简短创造一个类继承
Application并在manifest的application标签中展开挂号(只需要给Application标签扩张个name属性把团结的
Application的名字定入即可)。
android系统会为各种程序运行时成立一个Application类的目标且仅创建一个,所以Application能够说是单例
(singleton)形式的一个类.且application对象的生命周期是成套程序中最长的,它的生命周期就等于那多少个顺序的生命周期。因为它是全局
的单例的,所以在不同的Activity,瑟维斯(Service)中拿到的对象都是同一个对象。所以通过Application来举行局部,数据传递,数据共享
等,数据缓存等操作。

  • ###### Activity中 this、getApplicationContext和getActivity的区别

this:代表当前,在Activity当中就是意味当前的Activity,换句话说就是Activity.this在Activity当中可以缩写为this.
getActivity()指的是在fragment当中调用拿到他所在的Activity
getApplicationContext():生命周期是整套应用,应用摧毁,它才摧毁。

  • ###### asset和res的区别

答:res/raw和assets的相同点:
两者目录下的公文在包装后会原封不动的保存在apk包中,不会被编译成二进制。
res/raw和assets的不同点:
1)res/raw中的文件会被映射到R.java文件中,访问的时候一向利用资源ID即
R.raw.filename;assets文件夹下的文本不会被映射到R.java中,访问的时候需要AssetManager类。
2)res/raw不可以有目录结构,而assets则足以有目录结构,也就是assets目录下可以再建立文件夹
3)读取文件资源举例:
读取res/raw下的公文资源,通过以下方法得到输入流来举办写操作
InputStream is = getResources().openRawResource(R.raw.filename);
读取assets下的文本资源,通过以下模式取得输入流来举办写操作

AssetManager am = null; 
am = getAssets(); 
InputStream is = am.open("filename");
  • ###### webservice的UDDI是什么

UDDI 是一种目录服务,集团得以拔取它对 Web services
举办挂号和寻找。UDDI,英文为 “Universal Description, Discovery and
Integration”,可译为“通用描述、发现与集成服务”。

  • ###### 程序运行的权力和文件系统权限的区分

运行时权限 Dalvik( android 授权) 文件系统 linux 内核授权

  • ###### 对android系统的明白

5大优势:
一、 开放性
二、 挣脱运营商的约束
三、 丰硕的硬件选用
四、 不受任何限制的开发商
五、 无缝结合的Google应用
Android的5大不足
一、 安全和隐私
二、 首先开卖Android手机的不是最流年营商
三、 运营商依然可以影响到Android手机
四、 同类机型用户缩小
五、 过分依赖开发商缺少标准配置

  • ###### 手机上运用的传感器有怎么样

define SENSOR_TYPE_ACCELEROMETER 1 //加速度
define SENSOR_TYPE_MAGNETIC_FIELD 2 //磁力
define SENSOR_TYPE_ORIENTATION 3 //方向
define SENSOR_TYPE_GYROSCOPE 4 //陀螺仪
define SENSOR_TYPE_LIGHT 5 //光线感应
define SENSOR_TYPE_PRESSURE 6 //压力
define SENSOR_TYPE_TEMPERATURE 7 //温度
define SENSOR_TYPE_PROXIMITY 8 //接近
define SENSOR_TYPE_GRAVITY 9 //重力
define SENSOR_TYPE_LINEAR_ACCELERATION 10//线性加速度
define SENSOR_TYPE_ROTATION_VECTOR 11//旋转矢量

================================================
【ListView相关解析和面试题】
【关于Android四大组件的相关面试题】
【自定义View全解】
【View事件分发】
【自动登录的贯彻】
更多内容请关注
自身的专题
转载请表明
原稿链接:
http://www.jianshu.com/users/c1b4a5542220/latest\_articles

相关文章