亲宝软件园·资讯

展开

service

六式 人气:1

服务的创建

public class Myservice extends Service {
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

然后在清单文件中注册服务。

<service android:name=" "/>

服务的启动方式

startService方式

public class Myservice extends Service {
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }


    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }
}

然后在调用者里写开启和关闭服务的代码

public void start(){
        Intent intent=new Intent(this,Myservice.class);
        startService(intent);
    }

    public void stop(){
        Intent intent=new Intent(this,Myservice.class);
        stopService(intent);

    }

然后在清单文件中注册。

服务创建时执行的是onCreate()方法,服务启动时(也就是执行startService()方法时)会执行onStartCommand()方法。
onCreate()方法只在首次创建服务时调用,onStartCommand()服务启动时都会调用。
onDestory()则是当服务不再使用且将被销毁时,系统将会调用。
服务与调用者没有绝对的关联,当调用者关闭后,服务还会在后台运行。

bindService方式

创建service类

public class Myservice extends Service {

    class MyBinder extends Binder{
        void play(){};
        void next(){};
        void pause(){};
    }
    @Override
    public IBinder onBind(Intent intent) {
        return new MyBinder();
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }

    public void play(){

    }
    public void next(){

    }

    public void pause(){

    }

    @Override
    public boolean onUnbind(Intent intent) {
        return super.onUnbind(intent);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }
}

创建调用者类

public class MainActivity extends AppCompatActivity {
    private Myservice.MyBinder myBinder;
    private Mycon mycon;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    //绑定服务
    public void bind(){
        if(mycon==null){
            mycon=new Mycon();
        }
        Intent intent=new Intent(this,Myservice.class);
        //第三个参数是如果服务不存在就创建
        bindService(intent,mycon,BIND_AUTO_CREATE);
    }
    //解绑服务
    public  void unbind(){
        if(mycon!=null){
            unbindService(mycon);
            mycon=null;
        }
    }
    //调用服务中的方法
    public void call(){
        myBinder.next();
        myBinder.pause();
        myBinder.play();
    }

//创建Mycon类,用于实现连接服务
   private class Mycon implements ServiceConnection{
//绑定服务时调用,返回Myservice里面的Ibinder对象
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            myBinder= (Myservice.MyBinder) service;
        }
//服务失去连接时调用
        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    }
}

这里调用者没有写具体实现,只是一个大致流程。
这里通过bindService()绑定服务(系统会调用Myservice中的onBind()方法),然后通过call方法可以调用MyService类中的各个方法,操作完成后可以调用unbindService()方法解绑。

调用者与服务关联,当调用者关闭时,服务也会关闭。服务可以与调用者进行方法调用和数据交互。

服务的生命周期

服务的通信

本地服务通信

本地服务通信是指应用程序内部的通信。

上面bindService的例子就是本地服务通信。

远程服务通信

远程服务通信是指两个应用程序间的通信。
创建aidl接口

interface IService {
    /**
     * Demonstrates some basic types that you can use as parameters
     * and return values in AIDL.
     */
    void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
            double aDouble, String aString);
            String getName();
            int getPrice();
}

创建Aservice类

public class Aservice extends Service {
    private class IServieBind extends IService.Stub{

        @Override
        public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException {

        }

        @Override
        public String getName() throws RemoteException {
            return "lisi";
        }

        @Override
        public int getPrice() throws RemoteException {
            return 120;
        }
    }

    @Override
    public IBinder onBind(Intent intent) {
        return new IServieBind();
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }

加载全部内容

相关教程
猜你喜欢
用户评论