1.service的两种启动方式
采用start的方式开启服务
使用Service的步骤:
a.定义一个类继承Service
b.在Manifest.xml
文件中配置该Service
c.使用Context的startService(Intent)
方法启动该Service
d.不再使用时,调用stopService(Intent)
方法停止该服务
生命周期:
onCreate()
--->onStartCommand()
--->
onDestory()
采用bind的方式开启服务
Service
2.在
Manifest.xml
文件中配置该Service
3.使用
Contex
t的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)在设计及代码编写阶段避免出现出现同步/死锁或者错误处理不恰当等情况。