1.Android屏幕适配
图片适配:不同的文件夹下存放分辨率不同的图片 布局适配:单独为某一个分辨率创建一个布局文件夹,layout-800x480 尺寸适配:(经常使用)dp=px/设备密度 240x320(0.75) 320x480(1) 480x800(1.5) 1280x720(2.0) 代码适配:在代码中通过屏幕的宽和高设置控件所占的比例 权重适配:layout_weight2.点击事件的四种写法
内部类 匿名内部类 布局文件里的onClick属性 继承OnClickListener接口,重写onClick方法3.android5.0新特性
用户界面 材料设计语言 优化了通知栏系统,能够在锁屏界面直接訪问通知消息 系统底层,使用art取代dalvik 针对电池进行了软件优化4.安卓数据缓存
优点:降低server的压力 提高client的响应速度 支持离线浏览 常见的缓存管理方法是数据库和文件 数据库:下载完文件以后,把文件的相关信息存放到数据库,建议把url作为唯一的标识信息, 下次下载的时候依据url先查数据库 须要创建表。缓存的文件存放在手机内部存储空间,easy浪费内存,须要及时清理 文件缓存:使用File.lastModified得到文件最后改动的时间,与当前的事件进行比較,来达到缓存的效果5.activity提供的actionbar在3.0以上才干够使用。actionbarActivity是兼容2.x版本号的。当当前的activity
继承actionbarActivity时,使用theme.noTitle.FullScreen时会报错6.什么是ANR,怎样避免?
答:在Android中。活动管理器和窗体管理器这两个系统服务负责监视应用程序的响应。当用户的操作在5s内
应用程序没有做出响应,BroadReceiver在10s内没有执行完毕,就会出现应用程序无响应对话框。避免方法:Activity应该在它的关键生命周期方法尽可能的少去做创建操作。耗时操作,比如网络或者数据库 操作。应该在子线程里进行,主线程应该给子线程提供一个Handler,以便完毕是能交给主线程。
7.进程优先级:
前台进程:当前activity正在与用户交互 可见进程:用户仍然能够看到这个进程,某个activity的界面,可是不能操作。 服务进程:一个应用程序,一个后台服务在执行 后台进程:没有不论什么服务的进程,打开一个activity,按home键最小化 空进程:没有不论什么活动组件的进程8.布局套的层级多了,会不会有性能上的问题?
会,在DDMS的层级视图里面能够看到布局的层级关系,以及响应的measure,layout,draw的时间,能够通过 时间来推断性能,假设使用线性布局。会发现时间是最长的,尤其使用layout-weight属性,会发现measure的时间 变为两倍,尽量降低内嵌的层级,考虑使用更平级的组建。尽量使用FrameLayout,然后是RelativeLayout,最后 是LinearLayout9.在listview的优化中,为何使用convertview,为何使用viewholder,那个更能解决这个问题?
答:使用convertview能够实现对view的复用,降低了内存的消耗,这样大大节省了每次创建对象的时间,提升了listview的显示 效率。使用viewholder能够将view的子控件封装在viewholder中,通过view.setTag(ViewHolder)能够将view 和viewHolder进行绑定。这样就不用每次都调用view.findViewById方法查找控件。 使用convertview更能解决这个问题,使用viewholder攻克了控件换时间的问题,由于给view对象设置一个tag本身就 是占用内存的,因此viewholder的使用还是要区分不同的应用场景的。假设内存足够须要高效就使用viewholder。否则
不建议使用。10.VIew.inflate和view.findViewById哪个更耗时?
答:当然是view.inflate,这种方法完毕的功能是把xml布局文件通过pullParser的形式解析到内存中。须要io, 须要递归子节点11..ArrayList是不是线程安全的,假设不是。怎样变成线程安全的?
答:不安全。能够使用Collections.synchronizedList(list)将ArrayList变为安全的 Collections是针对集合的一个工具类。提供了一系列的静态方法对集合进行搜索。排序,线程安全化等操作12.多态时成员的訪问特点?
成员变量:编译执行都看左边 成员函数:编译看左边。执行看右边 静态函数:编译执行都看左边,静态方法不能算方法的重写13.堆和栈有什么差别?
栈中存放对象的引用,堆中存放对象的实体。堆中的对象由jvm的垃圾回收器负责回收。14.jvm载入class文件的原理机制?
jvm载入class文件是动态性的。也就是当须要的时候才载入,这也是为节约jvm的内存来考虑的。同一时候jvm的载入是 父托付机制,这个机制简单来说,就是类装载器有载入类的需求的时候,会先请示parent使用其搜索路径 帮忙载入。假设parent找不到,那么才自己按照自己的搜索路径搜索类。15.Linux经常使用的命令?
cd 进入某个路径 ls 显示文件和文件夹结构 mkdir 创建文件夹 touch 生成一个空文件 touch hello.txt echo 生成一个带内容的文件 echo “hello” > hello.txt cp 拷贝文件或文件夹 cat 显示文件内容 rm 删除文件16.使用Bundle类传递数据包时,能够放入一个可序列化的字段。这样。当要传递的数据字段比較多时,採用该方法
比較方便 使当前的类继承java.io.serializable Bundle bundle = new Bundle(); bundle,putSerializable(name,value);17.Handler机制的原理?
答;Android中的handler用于实现子线程和主线程之间的通信。比如子线程是不同意改动UI的。这时候能够 在子线程使用handler向主线程发送消息,让主线程改动UI。handler机制的实现,还依赖于Looper,Message这 两个类,当我们通过handler发送消息的时候,该消息就会被加入到消息队列中,Looper会不断的从消息队列中 取出消息。android默觉得主线程创建了一个Looper对象和MessageQueue.去消息的过程是线程堵塞的。这样不至于
在没有消息的时候耗费过多的CPU资源。 线程堵塞:指一个线程在执行过程中暂停。等待某个条件触发它。18.Thraed和AsyncTask的差别?
答:AsyncTask是封装好的线程池,是Handler和Thread的封装。AyncTask在操作UI线程上更为方便,由于 onPreExcute(),onProgressUpdate(),onPostExcute()方法均执行在主线程,这样就不用Handler发消息了。可是AsyncTask存在缺陷,我看过它的源代码,AsyncTask全局仅仅有5个工作线程,也就是假设一个应用使用 AsyncTask来执行线程。那么同一时间仅仅能有5个线程在工作,其它线程将被堵塞。(当我们使用Thread类创建线程的时候不存在 这个限制),所以AsyncTask不要用于多线程获取网络数据。这样easy产生堵塞,从而降低效率。总的来说,假设 须要简单的操作UI,AsyncTask更好一些,数据量多而且 复杂的情况下建议使用handler+thread 注意事项:Task的实例必须在主线程中创建 excute方法必须在主线程中调用 不要手动的调用onPreExcute等方法 task仅仅能被执行一次。多次执行会发生异常
19.说说MVC模式在android中的应用?
答:MVC是Model,View,Controller三部分组成,当中view主要由xml布局文件。或者用代码编写动态布局 来体现。Model是数据模型。事实上相似javabean,只是这些javabean封装了对数据库,网络的操作,Controller 一般由Activity负责。它依据用户的输入,控制用户界面数据的显示及更新model对象的状态。它通过控制 view和model和用户进行交互。20.什么情况下会出现内存泄漏?怎样避免这样的情况?
答:内存泄漏:假设在一个应用程序中,不再使用某个对象,可是还说有引用指向这个对象,那么垃圾回收器 就无法回收这个对象,这个对象所占的内存控件就无法被使用。这就造成了内存泄漏,android为不同类型的 进程分配了不同的内存上限。假设程序在执行过程中出现了内存泄漏而造成应用程序的内存超出上限。就会被 系统杀死。可能出现内存泄漏的情况:1)引用没有释放:注冊的监听器,广播没有取消,集合中的对象没有清理2)资源没有释放:网络,数据库的游标。 io流没有关闭 怎样避免:使用资源记得关闭。保证资源能够释放,对于图片的操作要记得使用缓存,同一时候要及时回收图片。 使用listview的时候,尽量复用convertview
21.android中数据的存储方式?
答:数据库,网络,文件。SharedPreference存储。ContentProvider存储22.AIDL的全称是什么,怎样工作,能处理那些类型的数据?
答:Android Interface Definition Language,安卓接口定义语言 AIDL一般用于远程服务,也就是进程间通信,我们能够分为server端和client,server端声明aidl文件。 文件命名为xxx.aidl,adt会自己主动生成aidl的代码文件,代码文件提供了aidl接口的实现类Stub,client假设 要使用服务端提供的服务,须要将xxx.aidl文件复制到自己的文件夹下。然后生成java类,然后在ServiceConnection 对象的onServiceConnected方法里面通过Stub.asInterface方法得到aidl的实现类。然后我们就能够调用 这个类的方法了 基本类型数据都能够,复杂数据也能够,只是要实现parcelable接口23.java怎样调用C,C++语言?
答:Java通过JNI调用。使用的时候先通过System.loadLibrary(“xxx”)将xxx.so文件载入到jvm中,同一时候 在类中必须对so文件里的方法进行声明:public native void test();24.activity和fragment之间是怎样进行数据传递的?
答:activity向fragment传递数据:在fragment中通过getActivity拿到当前fragment所关联的activity, 通过activity对象拿到fragmentManager对象。通过fragmentManager的findFragmentById或者findFramgnetByTag拿到 指定的fragment对象,调用fragment对象的方法 fragment向activity传递:通过getActivity拿到当前fragment关联的activity,必要时进行强转。调用activity中的方法。25.ListView中下拉刷新,在下拉刷新的过程中,突然立马点击条目,怎么屏蔽ListView条目的点击事件?
答:又一次BaseAdapter的两个方法: areAllItemsEnabled(){//全部条目能否够点击 return false; } public bolean isEnabled(int position){//某个位置的条目能否够点击 return false; }
26.convertview的个数为在listview滑动过程中当前屏幕上能看到的最多条目的个数。
27.当前的item点击之后里面的textview变为红色。item被又一次拉回来显示的时候。会默认回复原来的样子?
为什么?怎样解决? 答:由于每次getView获取当前item的时候,都会又一次new一个viewholder与当前item的布局文件绑定,也就是说, 每次会产生一个新布局给convertview显示。 解决的方法:对converview进行复用,当convertivew为空的时候。将生成的布局利用setTag保存在convertview 里面。当converview利用回收机制回收回来的时候。通过getTag将保存的布局取出来,又一次将布局文件里的控件 赋值就可以。28.当item继续往上滑的时候。可能出现以下的item样式也改变了,为什么,怎样解决?
答:由于以下的item利用的是上面item的convertview 使用ArrayList保存控件改变的item的位置,然后在绘制当前item的时候。依据这个position是否在集合中 来推断是否要改变控件的样式。29.android中的设计模式?
答:装饰者设计模式:对已有的对象的功能进行增强。能够自定类,将已有的对象传入,基于已有的功能。并提供加强功能, 那么自己定义的类就成为装饰类。装饰类一般会提供构造方法。接受被装饰的对象,基于被装饰的对象的功能。提供更强的方法 BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 在读取单个字节的基础上进行装饰,能够读一行 单例设计模式:,节省内存空间。节省时间。数据库的訪问 工厂设计模式:定义一个用于创建对象的接口,让子类决定实例化哪一了类,工厂方法使一个类的实例化延迟到子类20.asynctask:异步任务,就是在主线程执行的时候,我们能够完毕一些异步操作,能够将耗时的操作放在asynctask中,通过asynctask
能够解决多线程之间的通信问题。21.去掉数组中反复元素?
定义一个list集合。遍历当前数组。假设集合中不包括数组中的元素,加入到集合中2.找出两个数组中同样的元素?
答: 8.fragment的生命周期? 答:oncreate: fragment被创建 oncreateview:初始化fragment的布局 onactivitycreated: fragment所依赖的activity创建完毕 9.shareSDK:当我们须要进行分享的时候。,把全部的平台集中在一起,省去了跟好多平台打交道的麻烦 先要去下载sdk,下载的时候能够选择我们须要的平台 登录站点,加入app,获得appkey 解压下载的sdk.双击quickintegrate.jar生成文件,覆盖当前的项目。会在当前项目下生成相应的文件 加入权限,还有activity, 在assect文件夹下的shareSDK文件下将appkey替换成我们申请的appkey 把分享的代码加入到我们须要调用的地方- 本文已收录于下面专栏:
相关文章推荐
- 在10月份開始就没有再參与校招了。面试过程真的非常累。有时现场等面试一等就是几个小时。加上毕业论文开题的压力,所以没有继续參加各个公司笔面试了。过去几个月中,复习时也以前到处搜资料、搜真题。
毕竟从小到大...
- 2016-11-14 11:10
- 5002
- ————————-2016-11-23 尽管自己去转安全了,可是开发还是不想落下~备份下,留着以后想提升开发能力时候看。
转自于【huachao1001的专栏:http://blog.csdn.n...
- 2016-11-23 22:08
- 418
- Thread、MessageQueue、Message、Looper、Handler关系及须要注意的地方 Android不论什么一个Thread中都跟着一个Looper。Looper提供了MessageQ...
- 2016-09-26 17:09
- 443
- Android复习笔记
- 2017-02-20 22:25
- 45
- 1.Activity 定义: 结构: 特性:生命周期,用于显示View的组件 使用方法:Activity从创建到销毁的变化过程,须要了解哪些知识点。
a.怎样创建和启动何种模式的Activity b....
- 2016-11-07 22:21
- 72
- 老师划的重点: 题型包含: 1、选择题 20分 2、填空题 10分 3、简答题 30分 4、程序分析 20分 5、程序设计:20分 第一章:复习eclipse应用程序文件夹的含义 上...
- 2015-12-11 21:46
- 2716
- http://www.cnblogs.com/aimeng/archive/2012/03/13/2393244.html android体系介绍 http://blog.chinauni...
- 2017-05-09 14:40
- 105
- 放下屠刀,開始复习 时光如梭。一转眼大三第二学期就要完了。为了面试准备,还是乖乖開始复习Java和Android基础吧。我知道复习的东西不能一蹴而就,所以原计划一天复习三点内容,每天完毕目...
- 2017-04-17 22:55
- 1013
- SharedPreferences 译者署名: madgoat
- 2012-06-02 22:18
- 802
- 转载请注明出处:【huachao1001的专栏:http://blog.csdn.net/huachao1001/article/details/53156582】 在10月份開始就没有再參与校...
- 2016-11-27 16:09
- 184
- 原创
- 299
- 粉丝
- 47
- 喜欢
- 0
0条评论