Android基础——Service的介绍和使用

service与activity相似,代表可执行的程序,在程序运行时呈现界面,或者程序需要与用户交互,则使用activity,否则使用service

一.service的创建:

1.创建一个service的子类
2.在Manifest.xml中配置,通过<Intent-filter.../>定义可被哪些Intent启动
如:<service
            android:name=".MyService"
            android:enabled="true"
            android:exported="true">
            <intent-filter >
                <action android:name="my.first.service"/>
            </intent-filter>
        </service>
其中,为service设置的name为“"my.first.service”的action可随意定义。使用intent启动时,如activity访问service,则在activity
中执行如下代码:
Intent intent =  new Intent();
intent.setAction("my.first.service");//为intent设置action属性。。。

二.service的种类

1.本地服务:
启动方式:bindService():与访问者绑定一起,如随着activity的销毁,service终止
生命周期:onCreate()-》onBind()-》onUnbind()-》onDestroy()

其中,bindService(Intent service, ServiceConnection conn, int flags);方法中传入三个参数
service:intent要启动的service
conn:ServiceConnection对象,用来监听访问者与Service之间的连接情况。通过onServiceConnected(ComponentName name, IBinder service) 和 onServiceDisconnected(ComponentName name)两个重写方法。第一个重写方法中的IBinder类型参数service即可实现访问者与service间的通信。
flags:指定若未创建service,是否自动创建。不自动创建则指定为0,自动创建:Context.BIND_AUTO_CREATE。

service与访问者之间的通信:
在service的实现类中,可以定义内部类如:
MyBinder mBinder = new MyBinder();
public class MyBinder extends Binder{
    //通信传输的数据等
    public int getCount(){
        return count;
    }
}
将mBinder对象作为必需实现的onBind()重写方法的返回值:
@Override
 public IBinder onBind(Intent intent) {
      return mBinder;
 }
如此,所传count值通过 onServiceConnected()方法传递给了访问者。如在activity中接受通信:
public class MainActivity extends Activity{
    
    MyService.MyBinder mBinder;
    private ServiceConnection mConn = new ServiceConnection(){
        @Override
         public void onServiceConnected(ComponentName name, IBinder service) {
              mBinder = (MyService.MyBinder) service;
     }
         @Override
         public void onServiceDisconnected(ComponentName name) {
         }
    }
    //在onCreate中使用时:
    mBinder.getCount();
}

2.远程服务:
一般用于后台上传或下载服务,无法与访问者进行方法调用或数据交换。
启动方式:startService():与访问者没有联系,如不管activity是否销毁,service一直运行。
生命周期:onCreate()-》onStart()-》onDestroy()

调用该方法启动service后,也可以再次调用bindService()方法,只不过此时service启动后,调用unbindService()方法不会终止service,会一直在后台运行。此时service的生命周期是这样的:onCreate()-》onStart()-》onBind()-》onUnBind()【重写该方法时返回true】-》onReBind()
若该方法调用多次,onCreate()方法只会调用一次,但是onStartCommand()方法会调用多次,此时系统只创建一个service实例。该情况下,只需要调用一次stopService()方法才可终止service,或者service结束任务后自己调用stopSelf()方法。



注:本文参考《疯狂Android讲义》所写。



©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值