Android中常见的面试题总结(一)

1.service有哪几种,有什么区别?
1.调用startService()方法来启动Service。调用stopService()方法来停止Service。 。当然,在Service内部,也可以通过stopSelf(...)方式停止其本身。
2.Bound Service的主要特性在于Service的生命周期是依附于Client的生命周期的,当Client不存在时,Bound Service将执行onDestroy,同时通过Service中的Binder对象可以较为方便进行Client-Service通信。
3.Service本身都是运行在其所在进程的主线程(如果Service与Clinet同属于一个进程,则是运行于UI线程),但Service一般都是需要进行”长期“操作,所以经常写法是在自定义Service中处理”长期“操作时需要新建线程,以免阻塞UI线程或导致ANR;
4.Service一旦创建,需要停止时都需要显示调用相应的方法(Started Service需要调用stopService(..)或Service本身调用stopSelf(..), Bound Service需要调用unbindService(..)),否则对于Started Service将处于一直运行状态,对于Bound Service,当Client生命周期结束时也将因此问题。也就是说,Service执行完毕后,必须人为的去停止它。
2.Volley请求
请求失败时的重试和请求自定义超时
  Volley中提供了一个方案:可以通过Request对象调用 setRetryPolicy() 方法,设置超时和重试请求
  // 第一个代表超时时间:即超过20S认为超时,第三个参数代表最大重试次数,这里设置为1.0f代表如果超时,则不重试  
req.setRetryPolicy( new DefaultRetryPolicy(20 * 1000, 1, 1.0f));
3.加载一个从网上下载的图片,图片太大怎么办(不能失真)?
I 减少bitmap的内存占用
  • inSampleSize:缩放比例,在把图片载入内存之前,我们需要先计算出一个合适的缩放比例,避免不必要的大图载入。
  • decode format:解码格式,选择ARGB_8888/RBG_565/ARGB_4444/ALPHA_8,存在很大差异。
II.减少资源图片的大小,过大的图片可以考虑分段加载
4. Android内存泄漏的各种原因
1.资源对象没关闭造成的内存泄漏
2.构造Adapter时,没有使用缓存的convertView
3.Bitmap对象不在使用时调用recycle()释放内存
4.试着使用关于application的context来替代和activity相关的context
5.注册没取消造成的内存泄漏
6.集合中对象没清理造成的内存泄漏
5.数据存储方式:
1. SharedPreferences存储数据  
保存少量的数据,且这些数据的格式非常简单:字符串型、基本类型的值。比如应用程序的各种配置信息(如是否打开音效、是否使用震动效果、小游戏的玩家积分等),解锁口 令密码等
第二种: 文件存储数据
核心原理: Context提供了两个方法来打开数据文件里的文件IO流 FileInputStream openFileInput(String name); FileOutputStream(String name , int mode),这两个方法第一个参数 用于指定文件名,第二个参数指定打开文件的模式。
第三种:SQLite存储数据
SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。现在的主流移动设备像Android、iPhone等都使用SQLite作为复杂数据的存储引擎,在我们为移动设备开发应用程序时,也许就要使用到SQLite来存储我们大量的数据
第四种: 使用ContentProvider存储数据
Android这个系统和其他的操作系统还不太一样,我们需要记住的是,数据在Android当中是私有的,当然这些数据包括文件数据和数据库数据以及一些其他类型的数据。那这个时候有读者就会提出问题,难道两个程序之间就没有办法对于数据进行交换?Android这么优秀的系统不会让这种情况发生的。解决这个问题主要靠 

ContentProvider。一个Content Provider类实现了一组标准的方法接口,从而能够让其他的应用保存或读取此Content Provider的各种数据类型。也就是说,一个程序可以通过实现一个Content Provider的抽象接口将自己的数据暴露出去。外界根本看不到,也不用看到这个应用暴露的数据在应用当中是如何存储的,或者是用数据库存储还是用文件存储,还是通过网上获得,这些一切都不重要,重要的是外界可以通过这一套标准及统一的接口和程序里的数据打交道,可以读取程序的数据,也可以删除程序的数据,当然,中间也会涉及一些权限的问题。

一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据完全暴露出去,而且ContentProviders是以类似数据库中表的方式将数据暴露,也就是说ContentProvider就像一个“数据库”。那么外界获取其提供的数据,也就应该与从数据库中获取数据的操作基本一样,只不过是采用URI来表示外界需要访问的“数据库”。 

Content Provider提供了一种多应用间数据共享的方式,比如:联系人信息可以被多个应用程序访问。 

Content Provider是个实现了一组用于提供其他应用程序存取数据的标准方法的类。 应用程序可以在Content Provider中执行如下操作: 查询数据 修改数据 添加数据 删除数据 

标准的Content Provider: Android提供了一些已经在系统中实现的标准Content Provider,比如联系人信息,图片库等等,你可以用这些Content Provider来访问设备上存储的联系人信息,图片等等。
6.activity的启动模式?
(1)standard
(2)singleTop
(3)singleTask
(4)singleInstance
"standard"和“singleTop”可以被实例化多次,并且存在于不同的task中,且一个task可以包括一个activity的多个实例。
“singleTask”和”singleInstance”则限制只生成一个实例,并且是task的根元素。 singleTop要求如果创建intent的时候栈顶已经有要创建的Activity的实例,则将intent发送给该实例,而不发送给新的实例。
7.图片加载框架
Fresco
Android-Universal-Image-Loader
Glide
picasso
Android 三大图片缓存原理,特性对比
8.网络框架
OkHttp
Volley
Xutils3
Retrofit
9.Java中最常用的8种基本数据类型
short byte int long float double char boolean
10.你是如何理解面向对象的
首先说出它的三个特性:继承、封装、多态。
继承:(简单一句就是男人(子)和女人(子)都具有人类(父)的特性)
(1)继承:子类拥有父类的所有属性和方法。
(2)好处:抽取出了重复代码,减少了代码的冗余。
(3)缺点 :耦合性太强。

封装:(简单一句就是将一些重复调用的东西封闭起来,对外开放接口供其他调用)

概念:封装也称为信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封 装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内 部,尽可能地隐藏内部的细节,只
保留一些对外接口使之与外部发生联系。系统 的其他部分只有通过包裹在数据外面的被授权的操作来与这个抽象数据类型交流 与交互。也就是说,用户无需知道对象内部方法的实现细节,但可以根据对象提 供的外部接口(对象名和参数)访问该对象。

好处:

(1)实现了专业的分工。将能实现某一特定功能的代码封装成一个独立的实 体后,各程序员可以在需要的时候调用,从而实现了专业的分工。

(2)隐藏信 息,实现细节。通过控制访问权限可以将可以将不想让客户端程序员看到的信息 隐藏起来,如某客户的银行的密码需要保密,只能对该客户开发权限。 

多态:(override和overload,也就是覆写和重载

没有继承,就没有多态

不同类的对象能够定义相同名称的方法

当父类对象的指针或引用指向子类对象时,会进行动态监测,调用真实的方法

C++只有虚函数才能实现多态,OC中所有方法都可以

理解:子类以父类的身份出现,但做事情时还是以自己的方法实现。子类以父类 的身份出现需要向上转型(upcast),其中向上转型是由JVM自动实现的, 是安全 的,但向下转型(downcast)是不安全的,需要强制转换。子类以父类的身份出现 时自己特有的属性和方法将不能使用。


先总结这些吧,后期遇到再补。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值