Android面试题(一)

形成死锁的4个必要条件:

1、互斥条件:在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,就只能等待,直至占有资源的进程用毕释放。
2、占有且等待条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。
3、不可抢占条件:别人已经占有了某项资源,你不能因为自己也需要该资源,就去把别人的资源抢过来。
4、循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。(比如一个进程集合,A在等B,B在等C,C在等A)。

MVC架构,各个层负责的工作是什么

View

  •      展示数据
    
  •      接收事件(如按钮按下事件,选择改变事件)及传递事件
    
  •      基础验证(如email合法性,空文本检验等)
    
  •      可能直接接收model的对象
    

Controller

  •      处理界面的复杂逻辑
    
  •      改变界面布局
    
  •      与Model层通信
    
  •      复杂验证(如涉及到数据库查询)
    
  •      选用模型
    
  •      接收model层的数据,格式化并发送给View层
    

Model

  •      和数据访问层DB通信
    
  •      当数据改变或发生时,用特定的事件响应
    

动态广播和静态广播的差异

·-·动态注册广播不是常驻型广播,也就是说广播跟随activity的生命周期(在activity结束前,移除广播接收器)。
·-·静态注册是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。
·-·动态广播无需在AndroidManifest.xml中声明即可直接使用,也即动态;而静态广播则需要
同优先级的广播接收器,动态优先于静态
**

android的五种数据存储方式

文件存储
SharedPreferences
SQLite数据库存储
ContentProvider
网络存储

android系统五层

Android应用层
Android框架层
Dalvik虚拟机层
用户空间原生代码层
Linux内核层

安卓垃圾回收机制, system.gc何时调用

因内存垃圾过多而引发的内存耗尽;
不恰当的内存释放所造成的内存非法引用;
触发主GC(Garbage Collector)的条件:
①当应用程序空闲时,即没有应用线程在运行时,GC会被调用。因为GC在优先级最低的线程中进行,所以当应用忙时,GC线程就不会被调用,但以下条件除外。

②Java堆内存不足时,GC会被调用。当应用线程在运行,并在运行过程中创建新对象,若这时内存空间不足,JVM就会强制地调用GC线程,以便回收内存用于新的分配。若GC一次之后仍不能满足内存分配的要求,JVM会再进行两次GC作进一步的尝试,若仍无法满足要求,则 JVM将报“out of memory”的错误,Java应用将停止。
减少GC开销的措施:
(1)不要显式调用System.gc()
  此函数建议JVM进行主GC,虽然只是建议而非一定,但很多情况下它会触发主GC,从而增加主GC的频率,也即增加了间歇性停顿的次数。
(2)尽量减少临时对象的使用
  临时对象在跳出函数调用后,会成为垃圾,少用临时变量就相当于减少了垃圾的产生,从而延长了出现上述第二个触发条件出现的时间,减少了主GC的机会。
(3)对象不用时最好显式置为Null
  一般而言,为Null的对象都会被作为垃圾处理,所以将不用的对象显式地设为Null,有利于GC收集器判定垃圾,从而提高了GC的效率。
(4)尽量使用StringBuffer,而不用String来累加字符串
  由于String是固定长的字符串对象,累加String对象时,并非在一个String对象中扩增,而是重新创建新的String对象。避免这种情况可以改用StringBuffer来累加字符串,因StringBuffer 是可变长的,它在原有基础上进行扩增,不会产生中间对象。
(5)能用基本类型如Int,Long,就不用Integer,Long对象
  基本类型变量占用的内存资源比相应对象占用的少得多,如果没有必要,最好使用基本变量。
(6)尽量少用静态对象变量
  静态变量属于全局变量,不会被GC回收,它们会一直占用内存。
(7)分散对象创建或删除的时间
集中在短时间内大量创建新对象,特别是大对象,会导致突然需要大量内存,JVM在面临这种情况时,只能进行主GC,以回收内存或整合内存碎片, 从而增加主GC的频率。集中删除对象,道理也是一样的。它使得突然出现了大量的垃圾对象,空闲空间必然减少,从而大大增加了下一次创建新对象时强制主GC 的机会。
gc()进行回收的准则是什么?也就是说什么样的对象可以被回收?
没有被任何可达变量指向的对象。这里的可达是意思就是能够找到的(没有任何可达变量指向你,你还有活下去的理由吗?你就算活下去谁能找得到你呢?)
所以说,C++中将释放了的指针置为null的习惯要保留到Java中,因为这有可能是你释放内存的唯一途径。
不要频繁使用gc函数。
保持代码健壮(记得将不用的变量置为null),让虚拟机去管理内存

SharePreferences相关内容

SharedPreferences保存数据使用键值对的方式来存储数据的,是用xml文件存放数据,存放在/data/data//shared_prefs目录下;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值