1:什么是service
Service(服务)是Android系统提供的四大组件之一,主要作用是后台执行操作.Activity是Android提供的UI操作的组件,而Service是Android提供的没有UI页面后台执行的操作.
2:Service生命周期
2.1 startService() 生命周期
开启Service 分为两种 startService() 和bindService() startService() Service会在后台长期运行 和也页面Activity无关 bindService()关联了Activity的生命周期 页面销毁也销毁
bindService 可以传入一个ServiceConnection实例 CS 模式一对多个实例 c是Client s Service.
AIDL 的实现就是bindService 这种方式实现的
1:onCreate() 第一次创建执行创建方法 已经存在就不再走此方法
2:onStart() 过期方法
3:onStartCommand() 执行完onCreate() 方法之后执行此方法,当Service已经存在 直接执行此方法
4:onDestory()销毁的时候执行此方法,调用stopSelf()或者context.stopService()之后执行
####注意:
当onStartCommand()方法未执行完毕的时候调用stopSelf()或者context.stopService() 不会立即调用onDestory()方法.需要onStartCommand()方法执行完毕之后再执行onDestory方法().
2.2 bindService()
启动 context.bindService()
1:onCreate()
2:onBind()
释放 context.unBindService()
3:onUnBind()
4:onDestory()
3.Service和IntentService
Service 是Android的一个组件实现了后台运行的机制,在主线程中.后台运行就是为了处理数据,但是耗时处理又需要在子线程中处理,基于这种情况Android系统又提供了一个Service的子类.
IntentService :是Service的子类,内部维护了一个HanlerThread线程和一个Looper和一个Handler.用于处理子线程的操作().
实质就是:Service +Thread+Handler+looper的子线程耗时操作
问题:
1:Service中能Toast吗?
回答: Service 是主线程的可以Toast
2: 为什么IntentService 回调方法中不能Toast??
IntentService 是维护了一个ThreadHandler 在子线程操作 在他的回调方法中是不可以直接Toast的 可以创建一个Handler 切换到主线程再Toast.
回答:因为IntentService的操作 是运行在HandlerThread中的 是子线程 且 Looper没有调用Looper.prepare() 所以 不能Toast.
注意:
子线程调用Toast 需要在Toast前初始化Looper.prepare()
3.stopSelf()和context.stopService()
两者都是关闭服务的,stopSelf()是Service的方法,stopService()是Context的方法 调用这两个方法后会执行onDestory方法.
注意:
当onStartConmmand()方法未执行完毕时,调用stopService和stopSel()时 不会立即执行onDestory 会等待onstartCommand方法执行完在执行.
问题
1:startServce() 生命周期
2:stopService() 生命周期
3:stop() 和stopSelf() 区别
4:startService()和bindService()
5:IntentService()
6:Toast 在Service 中显示
网友评论