Android四大组件之Service
来源:互联网 发布:mac家装设计软件 编辑:程序博客网 时间:2024/05/21 04:39
Service,服务,是Android的四大组件之一,可以在Android的后台运行,用户看不到界面。我先讲一下Service的生命周期
当我们调用startService()方法的时候,相应的服务就会启动起来,如果这个服务之前未启动过,则onCreate()->onStartCommand(),如果这个服务之前启动过,则只会执行onStartCommand(),不会再执行onCreate(),虽然会调用多次onStartCommand()但是每个服务只会存在一个实例。如果我们想停下来这个服务,那么我们需要调用一次stopService()或stopSelf()方法。
我们也可以调用Context的bindService()来获取一个服务的持久链接,这时就会回调服务中的onBind()方法,返回IBinder的实例,实现与调用方的通信。只要没有调用unbindService()方法,这个服务就会一直保持。
记住,startService()对应stopService()才能使服务中onDestory()方法执行销毁服务。bindService()对应unbindService()方法,才能使服务中onDestory()方法执行销毁服务。如果你两种方式都调用过,那么必须同时调用stopService()和unbindService()方法,onDestory()方法才会执行。
很多人会问我用bindService()去调用服务,返回IBinder,这个IBinder如何创建?我们需要在Service类中创建一个内部类如MyBinder。
class MyBinder extends Binder{ public void startload(){ ..... }}然后在我们的调用方中这样写
private ServiceConnection connection = new ServiceConnection(){ @Override public void onServiceDisconnected(ComponentName name){ } @Override public void onServiceConnected(ComponentName name,IBinder service) { myBinder = (MyService.MyBinder)service; myBinder.startload();//调用service中的方法,实现通信 }
使用IntentService
如果我们想在服务中做复杂耗时的操作,我们势必想到的是new Thread()开启一个子线程去处理复杂逻辑,然后操作完后调用stopself().这样当然没问题,但是总有写人会忘记开启线程或者调用stopSelf()。所以我们可以使用IntentService.
public class MyIntentService extends IntentService{ public MyIntentService(){ super("MyIntentService")//调用父类的有参构造函数 } @Override protected void onHandleIntent(Intent intent) { //处理复杂的逻辑,这个方法已经运行在子线程中,不需要new thread } @Override public void onDestory() { super.onDestory(); }}
IntentService的特性:这个服务会在运行结束后,自行调用onDestory()方法去停止该服务,是不是很方便啊。
- Android四大组件之 Service
- Android四大组件之 Service
- Android四大组件之 Service
- android四大组件之Service
- android四大组件之Service
- android四大组件之Service
- Android四大组件之Service
- Android四大组件之service
- Android四大组件之Service
- Android四大组件之 Service
- Android四大组件之Service
- Android四大组件之Service
- Android四大组件之service
- Android四大组件之Service
- Android四大组件之Service
- android四大组件之Service
- android四大组件之Service
- Android 四大组件之 Service
- React+Redux 同构应用开发
- caffe编译找不到libcublas
- hdu 2159 FATE(完全背包)
- c++——异常
- JS与手机APP原生页面交互
- Android四大组件之Service
- 前端
- spark-submit提交参数设置
- Hbase Filter Scala 实战
- ZJU 3170 7 Levels of Binary Search Tree
- 新一代 Linux 文件系统 btrfs 简介
- 指针数组与数组指针比较
- HTTP协议 (二) URL
- 系统整理javascript---1