Android 面试题

来源:互联网 发布:淘宝背景图片素材大全 编辑:程序博客网 时间:2024/04/29 15:27
  • 生命周期,不同生命周期及其特点
    onCreate.onStart.onRestart.onResume.onPause.onStop.onDestroy

  • ANR全名,导致的原因,怎么避免
    anr 的全称是 application not response 即应用程序无响应
    产生原因:由于主线程有很多重要事情要做,比如响应点击事件等。如果在主线程里做了太多耗时的操作,则有可能引发ANR。
    如果你想模拟的话,比如在主线程里让主线程休眠6秒以上。Thread.sleep(6000);则会引发此状况。所以在4.0以上版本,如果在主线程里进行网络访问的操作,则会报错。
    避免:尽量将耗时的操作放在子线程里。
    Application Not Response程序未响应,主线程造成耗时操作,包括Activity.Service.BroadCast

  • 更新ui在哪个线程?为什么
    不是完全不可以,看在什么阶段更新不是完全不可以,看在什么阶段更新
  • 子线程更新ui的方法:
    1.Handler
    主线程中定义Handler,子线程发消息,通知Handler完成UI更新
    2.用Activity对象的runOnUiThread方法更新
    3.View.post(Runnable r)
  • 请描述handler消息机制
    looper.message.messagequeu.hander.
    message消息载体, handler处理消息,发送消息的对象! messagequeu消息队列,存放message遵循先进先出 looper循环向messagequeue取出消息,交给handler处理!
    (andriod提供了 Handler 和 Looper 来满足线程间的通信。
      Handler 先进先出原则。
      Looper类用来管理特定线程内对象之间的消息交换(Message Exchange)。

      1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列)。

      2)Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper从Message Queue取出)所送来的消息。

      3) Message Queue(消息队列):用来存放线程放入的消息。

      4)线程:UI thread 通常就是main thread,而Android启动程序时会替它建立一个Message Queue。)

  • 内存泄露跟内存溢出是什么。怎么处理
    溢出是内存占用太多,比如图片没压缩等,泄露好像是产量占用内存没有及时释放!

  • listview的优化
    convertview优化,避免重复加载布局,ViewHolder自定义类优化,避免重复寻找ID

  • 图片的异步加载三级缓存机制lrucache缓存(http://www.cnblogs.com/liuling/archive/2015/09/24/2015-9-24-1.html),
    listview滑动时不加载图片,convertview的复用,viewholder的使用,数据分页加载,listview高度matchparent的设置

对,图片错位,图片复用,都是lru里面操作哇?

  • 横竖屏切换的生命周期变化,怎么处理数据
    横坚屏切换的时候,activity会销毁重建,在manifest配置activity的时候可以设置configchanges属性,这样activity横坚瓶的时候,就只会调用onconfigchanges方法,所以重写这个方法,对数据进行保存就可以了
  • AIDL的全称是什么?如何工作?Android有多少层,分别是?
    Android Interfere Definition Language.
    4层,应用层,框架层, 库+Android Runtime, Linux内核

  • 进程间通信,两个进程需要有同样的AIDL文件实现通信
    AIDL的最终效果就是让 IPC的通讯就像调用函数那样简单。自动的帮你完成了参数序列化发送以及解析返回数据的那一系列麻烦。而你所需要做的就是写上一个接口文件,然后利用aidl工具转化一下得到另一个java文件,这个文件在服务和客户端程序各放一份。服务程序继承IxxxxService.Stub 然后将函数接口里面的逻辑代码实现一下。

  • activity的启动模式及其特点?
    1.Standard是默认的模式每开始一个activity,就会在栈中加一个activity,相同的也会加,所以加多少个,就要按多少次返回键才能回到最初的界面
    2.Singletop:如果任务栈的栈顶已经存在这个activity的实例,不会创建新的activity,而是利用旧的activity实例调用 旧的activity的onNewIntent()方法
    避免一个糟糕的用户体验,如果这个界面已经被打开且在任务栈的栈顶,就不会重复开启了
    3.singletask的启动模式:在任务栈里面只允许一个实例存在,
    4.ingleInstance的启动模式更加极端,开启新的activity,会给自己创建一个单独的任务栈,不管是从应用内部打开还是通过其他应用调用,TaskId是单独的,已存在的则只需调用onNewIntent

  • 你所知道的设计模式有哪些,请说下(http://zz563143188.iteye.com/blog/1847029)
    1、单例模式:
    目的是为了让系统中只有一个调用对象,缺点是单例使其他程序过分依赖它,而且不同单例运行在不同进程中,使得维护困难;
    懒汉式
    public class Singleton {
    /* 持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载 */
    private static Singleton instance = null;
    /* 私有构造方法,防止被实例化 */
    private Singleton() {
    }
    /* 1:懒汉式,静态工程方法,创建实例 */
    public static Singleton getInstance() {
    if (instance == null) {
    instance = new Singleton();
    }
    return instance;
    }
    }
    优点:延迟加载(需要的时候才去加载)
    缺点: 线程不安全,在多线程中很容易出现不同步的情况,如在数据库对象进行的频繁读写操作时。

2.工厂模式:
定义一个用于创建对象的接口,让子类决定将哪一个类实例化。从而使一个类的实例化延迟到其子类。
3.观察者模式:就是多个对象对一个对象进行监控,如缓存;
4.代理模式:自己的事交给别人去做,分别返回结果即可,如异步线程;
5.命令模式:
调用对象与作用对象之间分离,由中间件来协调两者之间的工作,如控制器;
6、适配器模式:
将一个接口变成用户所需要的接口,如baseadapter可以适配listview和spinner,因为它们有相同的接口
7、合成模式:
将一对多的关系转换成一对整体的关系,
如listview与适配器;
8、访问者

  • 图片加载优化怎么做?说下三级缓存?

Lucach中没有,本地找,本地没有网上下载放本地,显示之前做比例压缩!

  • 存储方式有哪些,有什么特点

sharedPreference XML文件保存,内部储存,外部储存,SQLite,网络储存,ContentProvider

    service 的启动方式跟特点,broadcast的注册方式及特点
StartService后台一直执行,调用stopself关闭,拿不到对象,BindService拿到Service对象,随BindService的Activity销毁而关闭!Broadcast静态注册,配置文件中注册,动态注册代码中注册,随注册的Activity销毁而消失!
  • asynctask的缺陷,如何解决?一般用在哪里?线程池了解过吗

不要asynctask执行时间较长任务,时间较长的使用woke线程,一般用在执行时间较短的任务上,asynctask内部就使用加线程池,所以如果asynctask执行的时间较长,就会造成,线程注射

线程池是控制线程数量用的!
加分项,有没上线项目,做过支付接口没,自定义view流程,socket通信等,这里需要大家多多补充
个人博客,英文文档阅读能力
Java基础,数据结构,算法

  • list有几种,都有什么特点?sleep跟wait的区别,strin跟stringbuffer的区别,说几个你认为非常好的软件或者游戏,概括下优缺点并且说下如果让你开发这个软件,你如何构架,可能用到哪些技术点,对于你来说有哪些技术难点

ArrayList基于数组,LinkedList基于链表,sleep主动休眠,主动唤醒,wait阻塞线程后需要其他线程调用notify唤醒!String对值进行操作后对象不变,操作对象效率低,StringBuffer对值进行操作后改变对象,效率高!!

  • 说说mvc模式的原理,它在android中怎样运用,你在具体工作中怎样具体运用mvc模式的。

model view controller 数据,视图,控制 Android典型的MVC是ListView Adapter 和数据之间的关系! 数据对应model ListView对应View Adapter对应controllor

  • ndroid中的动画有哪几类,它们的特点和区别是什么?如何将SQLite数据库(dictionary.db文件)与apk文件一起发布?Activity被回收了怎么办?说你对Gc的理解

桢动画,补间动画,3.0后加入属性动画。
将数据库文件复制到raw文件夹下!Activity被回收要在onSaveinstance中保存数据

  • 你所知道的加密方式,md5可逆吗?

  • 1.屏幕出现ANR你会想到什么地方的错误!

  • 2.Broadcast注册方式!

  • 3.ListView中Item布局如何实现3个ImageView,2个TextView,1个Button
    自定义BaseAdapter

  • 4.怎么使用adb命令安装一个在D盘Test文件夹下的APK

  • 5.编程题目,点击Back弹出退出Activity,且该Activity在原Activity的栈上面!

  • 1.怎么实现的社会化分享和第三方登陆!

  • 2.侧滑菜单怎么实现的!
    slidingmenu,问我实现原理!
    应该是要答出重写拦截和触摸两个方法!什么时候拦截,什么时候滑动!

  • 3.ViewPager和Fragment怎么搭配使用,指示器怎么使用?

  • 1.JAVA内存回收机制!怎么回收的?

  • 2.反射的原理!

  • 3.怎么自定义一个自己的图库!

  • 4.怎么理解缓存,缓存机制!
    缓存是以空间换时间,比如Java中常用的使用Map集合根据键值对来缓存对象。Android应用中把图片缓存到SD卡中避免二次下载。

  • 5.你使用网络加载图片时,用同步还是异步?
    因为访问网络耗时啊。。不能影响到主线程
    避免出现ANR,即使不出现ANR也会给用户出现卡顿的现象

  • 6.怎么理解数据结构?

  • 7.什么是MVC,网络解析数据时是M.V还是C?

C是控制层用于处理请求、V是视图层负责展现数据、M是数据模型层负责数据的处理

  • 8.怎么使用Location定位,怎么实现找不到GPS的时候切换到网络定位!
    位置提供器有三,GPS_PROVIDER、NETWORK_PROVIDER、PASSIVE_PROVIDER,开始前先看看GPS的定位功能是否能够使用: List providerList = locationManager.getProviders(true);传入ture表示只有启用的位置提供器才能被返回
    接下来再调用getLastKnownLocation()将provider传入得到了具体的位置信息。当然,如果要监听位置变化再做处理即可。

  • 9.基本数据类型和引用数据类型的区别!(面试安卓,全是Java,怪我没多研究一下Java啊)

  • 10.怎么自定义一个异常!

  • 1.广播有几种?
    有序,无序,粘滞,系统,自定义!

  • 2.Activity的生命周期

  • 3.Activity横竖屏切换生命周期,如何让切换后不执行OnCreate

不设置Activity的android:configChanges时,切屏会重新调用各个生命周期 默认首先销毁当前activity,然后重新加载
设置Activity的android:configChanges=”orientation|keyboardHidden|screenSize”就不会执行oncreate

  • 4.安卓四大组件

这只是问题的开始,你答完后,就会问,都有什么用,然后给你模拟个功能,让你实现!

  • 5.调用相机拍照上传相片需要做什么处理!
    压缩就好了,剪裁了影响用户体验!

加载100张图片,实现思想

设置图片缓存,分批加载显示

  • 7.为什么要进行分页加载
    缓解服务器压力,优化listview,增强用户体验,减少内存消耗

  • 8.怎么去找ANR错误

  • 1.IPC(进程间通信)的机制

Android中的ipc主要是通过aidl接口文件来实现跨进程通信,通常用在service与其他组件的通信中。

  • 2.Activity、Service、Intent、Intent filter、BroadCast、BroadCastReciver的区别

  • 3.进程和线程的区别

  • 4.Andorid的储存方式

  • 5.怎么做适配?
    适配可以采用dp,ps。根据不同的分辨率切不同图片,碰见特殊的分辨率可以创建相关文件夹重新布局

  • 6.怎么将Activity设置成窗口模式
    把activity主题设成dialog样式!

  • 7.4.0,4.4,5.0之间有什么区别
    4.0的时候,Google规定了访问网络不能在主线程,4.4的时候,产生了两用编译模式,5.0的时候,迎来了扁平化,全新的设计语言!

  • 8.遇见过什么不同系统的错误或者不同版本的错误(啥意思啊?)
    估计还是问的每个版本有什么特别地方要注意

9.安卓中常用动画的区别!

10.简述一下Handler的运行机制

11.Activity意外回收后怎么保存数据,怎么恢复数据?

瞬时数据 重写onsaveinsta.. 方法 持久化在onpause 里保存数据 oncreate恢复

  • MVC原理及其在安卓中的应用!

  • 13.子线程中能创建Handler吗?怎么创建?

Looper.prepare new Looper.Looper

  • 1.mediapayer和Soundpool,有什么区别?
    mediapayer是create出来,不支持多个音频同时播放。Soundpool new出来,支持多个音频同时播放,但最大1M,播放延迟

  • 2.用定位怎么算距离,前端算还是后端算

  • 3.面象对象的英文怎么写

  • 4.开发过程中用过那些设计模式

  • 5.View Pager如何实现无限自动滑动?

  • 6.如果子线程想更UI,你能用多少种方法,?

  • 7.怎么显了,网页内容?

  • 8.SqliteOpenHelper创建表后,在第2版想添加一个sex字段,在第3版想添加age字段怎么操作?
    new数据库时传入版本号,如果大于之前的版本号,会执行onUpgrade()方法,在此方法中执行alter table xxx add sex varchar(10) not null,以此类推。
    根据版本号的不同,会执行onUpgrade方法!然后根据onUpgrade方法里面的两个参数判断是第几版,从而执行相应方法

  • 9.getReadableDataBase和getWriteableDataBase有什么区别
    都会创建或者打开一个数据库,当数据库不可写入,如存储空间已满,前者以只读方式打开数据库,后者出现异常

  • 10.怎么自定义一个广播?
    继承broadcasReceiver,在清单文件中配置广播,添加相应action

  • 11.怎么自定义和使用一个Contetprovider
    一个类继承contentprovider,在静态代码块里面添加uri!在清单文件中注册。然后可以实现更删查的方法!使用别人的内容提供者,使用contentResolver

0 0
原创粉丝点击