Android中的Service使用

两种服务的启动方式:

Start方式(与activity无关联):

跟启动源没有任何关系
无法得到服务对象

Bind方式(与activity有关联):

通过Ibinder接口实例,返回一个ServiceConnection对象给启动源
通过ServiceConnection对象的相关方法可以得到Service对象

两种方式的生命周期对比:
生命周期图

Start方式:

代码比较简单,步骤是:

  1. 自定义一个类继承Service
  2. 在AndroidMainifest.xml文件中注册
  3. 利用Intent和startService(intent)来启动服务
Bind方式:

此方式可以与activity进行通讯
1、自定义类继承Service:
2、 在自定义的service里边写一个内部类继承Binder类MyBinder,在MyBinder里边定义activity需要操纵service的方法,然后在onBind里边返回MyBinder的实例,代码如下:

package noahzu.github.io.servicedemo;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.util.Log;
public class MyService extends Service {
    private static final String TAG = "MyService";
    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG,"==onCreate");
    }
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        Log.d(TAG,"==onBind");
        return new MyBinder();
    }
    @Override
    public boolean onUnbind(Intent intent) {
        Log.d(TAG,"==onUnbind");
        return super.onUnbind(intent);
    }
    public class MyBinder extends Binder{
        public void play(){
            Log.d(TAG,"play");
        }
        public void pause(){
            Log.d(TAG,"pause");
        }
        public void next(){
            Log.d(TAG,"next");
        }
        public void previous(){
            Log.d(TAG,"previous");
        }
    }
}

3、在activity中定义一个MyBinder

MyService.MyBinder myBinder;

4、 在activity中定义ServiceConnection的实例,并在其xx方法中返回的Service强转赋值给myBinder,这样activity就可以通过自己持有的myBinder来操纵service了

ServiceConnection serviceConnection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        myBinder = (MyService.MyBinder)service;
    }
    @Override
    public void onServiceDisconnected(ComponentName name) {

    }
};

5、 ServiceConnection的实例来启动服务

public void bindService(View view){
    Intent intent = new Intent(MainActivity.this,MyService.class);
    bindService(intent, serviceConnection, Service.BIND_AUTO_CREATE);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值