zoukankan      html  css  js  c++  java
  • service

    一、服务的创建

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

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

    <service android:name=" "/>
    

    二、服务的启动方式

    2.1 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()则是当服务不再使用且将被销毁时,系统将会调用。
    服务与调用者没有绝对的关联,当调用者关闭后,服务还会在后台运行。

    2.2 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()方法解绑。

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

    三、服务的生命周期

    四、服务的通信

    4.1 本地服务通信

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

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

    4.2 远程服务通信

    远程服务通信是指两个应用程序间的通信。
    创建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();
        }
    
  • 相关阅读:
    Docker
    dcoker-componse-2
    MyBatis的基本使用
    SpringMVC实现文件上传和下载
    CF817E Choosing The Commander
    CSP 2020 游记
    COCI2014-2015 Contest#1 题目选做
    CF590D Top Secret Task
    LuoguP1937 [USACO10MAR]Barn Allocation G
    CF741C Arpa’s overnight party and Mehrdad’s silent entering
  • 原文地址:https://www.cnblogs.com/dearnotes/p/12366711.html
Copyright © 2011-2022 走看看