2018-06-04 笔试题

2018-06-06  本文已影响0人  浮夸初衷

Android的四大组件是哪个,他们的作用?

Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,他需要保持各界面的状态,做很多持久化的事情,妥善管理生命周期以及一些跳转逻辑。

Service:后台服务于Activity,封装一个完整的功能逻辑实现,接受上层指令,完成相关的事物

ContentProvider:是Android提供的第三方应用数据的访问文案,可以派生ContentProvider类,对外提供数据,可以像数据库一样进行选择排序,屏蔽内部数据的存储细节,向外提供了统一的接口模型,大大简化上层应用,对数据整合提供了更方便的途径

BroadCast Receiver:接受一种或者多种Intent作触发事件,接受相关消息,做一些简单处理,转换成一条Notification,统一了Android的事件广播模型

简述Androd常用的五种布局

线性布局  相对布局  表格布局   绝对布局  针布局

Android常用的动画有哪几种?他们的作用与区别?

补间动画相当于视图动画:只是视觉上的一个效果,实际View属性没有变化,性能好,但是支持方式少

属性动画:通过变化的属性来打到动画的效果,性能略差,支持点击等事件

帧动画:通过drawable一帧帧画处理的

Gif动画:原理同上,canvas画出来

ListView的优化布局

1)、对convetView进行判空,是当convertView不为空的时候直接重新使用convertView从而减少了很多不必要的View的创建

2)、定义一个ViewHolder,将convetView的tag设置为ViewHolder,不为空时重新使用即可

3)、当ListView加载数据量较大时可以采用分页加载和图片异步加载

Android的存储方式有哪些?

1)SharedPreferences   存储路径:(data/data/packagename/shares_prefs), 轻量级存储,以键值对的形式存储在xml中,一般用来保存应用中的设置属性    

2)文件存储            SD卡存储多媒体文件, 文件缓存   

 3) Sqlite数据库        存储路径:(data/data/packagename/databases), 一种嵌入式数据库,支持sql语言,存储大量结构性数据   

 4)ContentProvider  进程(应用程序)间数据共享,数据源可以是sqlite,也可以是xml,相关类: ContentResolver(内容解析器), ContentObserver(数据                        观察者)  

  5) 网络存储    天气数据的xml,json格式等等,通过HttpUrlConnection,HttpClient,或者SOAP协议获取数据

Android的启动模式有哪些?

standard模式   、singTop模式 、singTask模式 、singleInstance模式

Activity在屏幕旋转时的生命周期?

-不同条件下,旋转屏幕时,activity的生命周期发生的变化也是不一样的。总共有以下三种情况:

不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次;

设置Activity的android:configChanges=”orientation”时,切屏会重新调用各个生命周期,切横、竖屏时都只会执行一次;

设置Activity的android:configChanges=”orientation|keyboardHidden|screenSize”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。

需注意的是,在4.0以后的版本需要加上ScreenSize 不然不会执行onConfigurationChanged方法

执行顺序:onCreate、 onStart 、onResume、  

onConfigurationChanged

详解地址(https://blog.csdn.net/qq_16064871/article/details/46480525)

注册广播有几种方式,这些方式有何优缺点,请谈谈Androidr引入广播机制的用意

    1)第一种不是常驻型广播,也就是说广播跟随程序的生命周期。

     2)第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。

请解释下在单线程模型中,Message Handler  MessageQUeue Looper

handler获取当前线程中的looper对象,looper用来存放Message的MessageQueue中取得Message,再有android进行Message的分发和处理

MessageQueue(消息队列) 用来存放通过handler发送过来的消息,通常附属于某一个创建他的线程,可以通过Looper.myQueue()得到当前线程的消息队列

Hanlder 可以发布或者处理一个消息或者操作一个Runnable,通过Handler发送消息,消息将只会发送到与他消息队列,只能处理该消息队列中的消息

Looper 是Handler和消息队列之间通信桥梁,程序组件首先通过Handler把消息传递给Looper,Looper把消息放入队列。Looper也把消息队列里的消息广播给所有的Handler

Message:消息的类型,在Handler类中的handleMessage方法中得到单个的消息进行处理。在单线程模型下,为了线程通信问题,Android设计了一个Message Queue(消息队列), 线程间可以通过该Message Queue并结合Handler和Looper组件进行信息交换。

Service和Thread的区别?

Thread:是程序执行的最小单位,他分配CPU的基本单位。可以用Thread执行异步操作

Serviece:是四大组件之一是android的一种机制,当他运行的时候如果是Local Service,那么对应的Service是运行在主线程main线程上

高级:

1。如何对Android程序进行性能分析?

Android性能主要之响应速度和UI刷新速度

首先从函数的耗时来说,

2。什么情况下会导致内存溢出?

一,大量位图的加载

二, Bitmap对象不在使用时调用recycle()释放内存

三, 查询数据库没有关闭游标

四,构造Adapter时,没有使用缓存的 convertView

3。如何避免OOM异常?

首先OOM是什么?

当程序需要申请一段“大”内存,但是虚拟机没有办法及时的给到,即使做了GC操作以后

这就会抛出 OutOfMemoryException 也就是OOM

Android的OOM怎么样?

为了减少单个APP对整个系统的影响,android为每个app设置了一个内存上限。

如何避免OOM?

减少内存对象的占用

I.ArrayMap/SparseArray代替hashmap

II.避免在android里面使用Enum

III.减少bitmap的内存占用

inSampleSize:缩放比例,在把图片载入内存之前,我们需要先计算出一个合适的缩放比例,避免不必要的大图载入。

decode format:解码格式,选择ARGB_8888/RBG_565/ARGB_4444/ALPHA_8,存在很大差异。

IV.减少资源图片的大小,过大的图片可以考虑分段加载

内存对象的重复利用

大多数对象的复用,都是利用对象池的技术。

I.listview/gridview/recycleview contentview的复用

II.inBitmap 属性对于内存对象的复用ARGB_8888/RBG_565/ARGB_4444/ALPHA_8

这个方法在某些条件下非常有用,比如要加载上千张图片的时候。

III.避免在ondraw方法里面 new对象

IV.StringBuilder 代替+

4。Anroid如何捕获未捕获的异常?

关键是实现Thread.UncaughtExceptionHandler

然后是在application的onCreate里面注册

5。ANR是什么?怎么避免和避免ANR?

ANR------(Application Not Responding)

应用程序无响应(也就是在规定的时间内,没有响应)

ANR一般有三种类型:

1). KeyDispatchTimeout(5 seconds) --主要类型按键或触摸事件在特定时间内无响应2). BroadcastTimeout(10 seconds) --BroadcastReceiver在特定时间内无法处理完成3). ServiceTimeout(20 seconds) --小概率类型 Service在特定的时间内无法处理完成为

为什么会超时:事件没有机会处理 & 事件处理超时

怎么避免ANR:ANR的关键是处理超时,所以应该避免在UI线程,BroadcastReceiver 还有service主线程中,处理复杂的逻辑和计算而交给work thread操作。

1)避免在activity里面做耗时操作,oncreate & onresume

2)避免在onReceiver里面做过多操作

3)避免在Intent Receiver里启动一个Activity,因为它会创建一个新的画面,并从当前用户正在运行的程序上抢夺焦点。

4)尽量使用handler来处理UI thread & workthread的交互。

6。Android线程通信有哪几种方式?

1。Handler机制

2。runOnUiThread方法

3。View.post(Runnable r) 

4。AsyncTask

7.Devik进程Linux进程线程的区别

Dalvik进程

每个android app都会独立占用一个dvm虚拟机,运行在Linux系统中,所以Dalvik进程和Linux进行是可以理解为同一个概念

8.描述下Android的系统架构

应用层 应用框架层 liunx内核层 系统运行层

9。android应用对内存是如何限制的?我们应用如何合理使用内存

activitymanager.getMemoryClass()获取内存限制

减少内存对象的占用、内存对象的重复利用

10。Handler机制

一个Handler允许你发送和处理Message和Runable对象,每个线程都有自己的Looper,每个Looper中封装着MessageQueue。Looper负责不断的从自己的消息队列里取出队头的任务或消息执行。每个handler也和线程关联,Handler负责把Message和Runable对象传递给MessageQueue(用到post ,sendMessage等方法),而且在这些对象离开MessageQueue时,Handler负责执行他们(用到handleMessage方法)。 其中Message类就是定义了一个信息,这个信息中包含一个描述符和任意的数据对象,这个信息被用来传递给Handler.Message对象提供额外的两个int域和一个Object域。默认情况下一个线程是不存在消息循环(message loop)的,需要调用Looper.prepare()来给线程创建一个消息循环,调用Looper.loop()来使消息循环起作用,从消息队列里取消息,处理消息。调用Looper.loop()之后循环已经开始,下一个由handler发的message将会被这个handler的handleMessage方法处理,这是一个----循环。

11。事件分发机制

事假的分发过程由三个很重要的方法来共同完成的:

dispatchTouchEvent 、onInterceptTouchEvent 和onTouchEvent

(事件梳理地址: https://blog.csdn.net/android_zyf/article/details/60466323)

12。开发中使用过哪些框架,平台

  百度地图  、   Volley 、   fastjson、   picciso、  友盟、   zxing、   Gson、 EventBus 时间分发机制,由handler实现,线程间通信、Xutils

13。请说下Http请求的基本过程

1。连接   建立一个socket连接

2。请求  连接成功之后,开始先webView服务器发送请求这个请求是get与post

3。应答  webView服务器接收到请求,进行处理

4。关闭连接  当应答结束后,web浏览器与web服务器必须断开

14。屏幕适配

屏幕适配的方式:xxxdpi, wrap_content,match_parent获取屏幕大小来处理

dp是适配屏幕的 sp来确定字体的大小

drawable-xxdpi,values-1280*1920等 这些都是适配的资源

warp_content,match_parent ,这些是view的自定义

weight 这是权重的适配

面试题

https://blog.csdn.net/liu852298068/article/details/52793586

https://www.cnblogs.com/android-blogs/p/6650298.html

上一篇下一篇

猜你喜欢

热点阅读