一、问service是什么?
答:service(服务)是一个一种可以在后台,执行长时间运行操作,而没有用户界面的组件。注意:service和braodcastReceiver都是运行在主线程。所以不建议执行耗时操作
二、Service在程序中运行,有那两种方式?
答:startService():、bindService():
startService()
此种开启方式Service会经历onCreate()–onStart()。若Service还没运行,则先调用onCreate(),然后调用onStart();如果Service已经启动,则只会调用onStart()。一个Service的onStart()方法可以被调用多次。stopService的时候直接onDestroy,如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。
bindService():
此种启动方式Service会经历onCreate()–onBind(),onBind将会返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service的运行状态等。这个时候调用者会和Service绑定在一起,调用者退出的时候,Service就会调用onUnbind–onDestroy退出。
三、service和Thread的区别?
答:startService():、bindService():
- 1、定义方面区别
Thread是程序执行的最小单元(线程),它是分配CPU的最小单位,可以用它来执行一些异步操作。
service是android的一种机制,当它运行的时候,如果是本地的service,那么它对应的线程是主线程,(也可以理解为,service依托于它所在的主线程),所以相比而言,Thread是很独立的。
- 2、实际开发中方面区别。
Thread可以执行耗时操作。
service试运行在主线程,不可以做耗时操作。如果需要必须开启一个子线程来操作耗时任务。
- 3、应用场景方面区别。
Thread,经常用在、数据下载、数据上传,图片加载,等大数据交互的情况下。
service,经常用在,需要长时间运行在后台,并且不需要数据交互,才会使用,比如闹钟,天气预报,后台播放音乐等。
四、service和Thread有什么关系,什么时候用到service,什么时候用到thread?
答:可以明确的说,他们没有任何的关系,之所以有人把他们联系起来,可能是因为英文翻译的原因,service翻译的意思是“服务”,而“服务”可以理解为后台。
Thread是开启一个子线程,在子线程中执行一些耗时操作,就不会阻塞主线程的运行,而Service在我们的观念中,他是处理一些后台任务,所以可以把一些耗时操作放在service来处理,这里是大错特错。这是把后台的概念和子线程的概念全部搞乱了,开启一个service和开启一个Thread是两码事。在提示一下,service的运行是依赖于主线程,而Thread是子线程。所以两者没有任何关系,也不要在service执行耗时操作。
五、什么是广播?
**答:广播他是一个用到非常广泛,它是在应用程序之间传输信息的一种机制,它类似于java中的观察者模式,Android中我们要发送的广播内容是一个Intent,这个Intent中可以携带我们要传递的数据
。**
六、广播的场景、种类?
答:
- 场景:
a、同一个app中多个不通的组件之中进行消息通讯。
b、不通之间app组件之间的通讯。
- 种类:
a、普通广播(Content.sendBroadcast)
b、有序广播(Content.sendOrderedBroadcast),根据优先级来进行传递。
c、本地广播(Local Broadcast):只在APP内容使用。
七、注册广播有几种方式?
答:
1、静态注册。
静态注册是在AndroidManifest.xml文件中配置,这种方式的注册是常驻型的,也就是说当应用关闭后,如果有广播信息传来,MyReceiver也会被系统调用而自动运行。
2、动态注册。
动态注册需要在代码中动态的指定广播地址并注册,通常我们是在Activity或Service注册一个广播,当这个Activity或Service被销毁时如果没有解除注册,系统会报一个异常,提示我们是否忘记解除注册了。所以,记得在特定的地方执行解除注册操作:
详情:http://www.cnblogs.com/sunzn/archive/2013/02/13/2910899.html
八、广播实现的机制?
答:
AMS:是Android内核的核心功能之一。
AMS:是android系统服务,Activity管理的服务端,用于管理activity的各种行为,控制activity的生命周期,派发消息事件,低内存管理等等。实现了IBinder接口,可以用于进程间通信。