面试小结

1.service的两种启动方式

采用start的方式开启服务

使用Service的步骤:

a.定义一个类继承Service
b.在Manifest.xml文件中配置该Service
c.使用Context的startService(Intent)方法启动该Service
d.不再使用时,调用stopService(Intent)方法停止该服务

生命周期:

onCreate()--->onStartCommand()---> onDestory()

采用bind的方式开启服务

1.定义一个类继承Service
2.在Manifest.xml文件中配置该Service
3.使用Context的bindService(Intent, ServiceConnection, int)方法启动该Service
4.不再使用时,调用unbindService(ServiceConnection)方法停止该服务
生命周期:

onCreate() --->onBind()--->onunbind()--->onDestory()

2.生命周期onstart和onresume有什么区别

onStart()是activity界面被显示出来的时候执行的,用户可见,包括有一个activity在他上面,但没有将它完全覆盖,用户可以看到部分activity但不能与它交互。

onResume()是当该activity与用户能进行交互时被执行,用户可以获得activity的焦点,能够与用户交互。onStart()通常就是onStop()(也就是用户按下了home键,activity变为后台后),之后用户再切换回这个activity就会调用onRestart()而后调用onStart()

onResume()是onPause()(通常是当前的acitivty被暂停了,比如被另一个透明或者Dialog样式的Activity覆盖了),之后dialog取消,activity回到可交互状态,调用onResume()。

3.数组和链表的区别

数组结构在通过索引进行查询数据时效率比较高,而对于数组插入和删除操作,则效率会比较低,在第一个位置进行插入数据,其余数据就需要依次向后移动,而第一个数据进行删除,则需要所有数据全部向前移,这样的话,就会推出第二种结构,链表结构。简单的链表:为了保证数据插入和删除,不会影响其他数据的移动,保证线性开销,所以就引出了链接。每个表都不会连续进行存储。

     链表是由一系列节点组成的,每个节点都会有一个链点,这就是next链,而next链则会执行下一个node的引用,所以我们在插入或者删除的时候,需要该表链表next链的指向地址即可,每个节点不需要内存进行连续存储,这样会减小删除和插入的线性开销。链表结构主要分为两种链表,单向链表和双向链表 ,即单向链表只有一个next链,而双向链表会有next链和pre链。

4.ANR的认识和如何避免 A.在5秒内没有响应输入的事件(例如,按键按下,屏幕触摸)--主要类型 B.BroadcastReceiver在10秒内没有执行完毕 C.Service在特定时间内(20秒内)无法处理完成--小概率类型

如何避免:

(1)避免在主线程上进行复杂耗时的操作,比如说发送接收网络数据/进行大量计算/操作数据库/读写文件等。这个可以通过使用AsyncTask或者使用多线程来实现。

(2)broadCastReceiver 要进行复杂操作的的时候,可以在onReceive()方法中启动一个Service来处理

(3)在设计及代码编写阶段避免出现出现同步/死锁或者错误处理不恰当等情况

5.自定义控件onMeasure方法中有几种测量大小的方法



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值