Service使用总结

Service使用总结

调用服务中的方法

interface IApp {
    void install();

    void unInstall();

    void update();
}



public class AppManagerService extends Service {

    @Override
    public void onCreate() {
        super.onCreate();
        LogUtils.e("AppManagerService onCreate");
    }


    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        LogUtils.e("AppManagerService onBind");
        return new AppManagerBinder();
    }

    private void install() {
        LogUtils.e("AppManagerService install");
    }

    private void unInstall() {
        LogUtils.e("AppManagerService unInstall");
    }

    private void update() {
        LogUtils.e("AppManagerService update");
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        int command = super.onStartCommand(intent, flags, startId);
        LogUtils.e("AppManagerService onStartCommand");
        return command;
    }

    private class AppManagerBinder extends Binder implements IApp {
        @Override
        public void install() {
            LogUtils.e("AppManagerBinder install");
            AppManagerService.this.install();
        }

        @Override
        public void unInstall() {
            LogUtils.e("AppManagerBinder unInstall");
            AppManagerService.this.unInstall();
        }

        @Override
        public void update() {
            LogUtils.e("AppManagerBinder update");
            AppManagerService.this.update();
        }
    }
}

>

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private AppServiceConn conn;
    private IApp mAppManagerBinder;

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

        addListener();
        initData();
    }

    private void initData() {
        bindLocalService();
    }

    private void bindLocalService() {
        Intent service = new Intent(this, AppManagerService.class);
        startService(service);
        conn = new AppServiceConn();
        bindService(service, conn, Service.BIND_AUTO_CREATE);
    }

    private void addListener() {
        findViewById(R.id.btn_bind_service).setOnClickListener(this);
        findViewById(R.id.btn_call_method).setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_bind_service:
                Intent service = new Intent(this, AppManagerService.class);
                startService(service);
                conn = new AppServiceConn();
                bindService(service, conn, Service.BIND_AUTO_CREATE);
                break;
            case R.id.btn_call_method:
                if (mAppManagerBinder != null) {
                    mAppManagerBinder.install();
                    mAppManagerBinder.unInstall();
                    mAppManagerBinder.update();
                }
                break;
        }
    }

    private class AppServiceConn implements ServiceConnection {
        @Override
        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
            LogUtils.e("AppServiceConn onServiceConnected");
            mAppManagerBinder = (IApp) iBinder;
        }

        @Override
        public void onServiceDisconnected(ComponentName componentName) {
            LogUtils.e("AppServiceConn onServiceDisconnected");
        }
    }
}

调用远程服务

server端
  • main/aidl

    interface IPay {
        void pay();
    
        void reverse();
    }
    
  • main/java/service

    public class PayService extends Service {
        @Nullable
        @Override
        public IBinder onBind(Intent intent) {
            return new PayServiceBinder();
    }
    
    private class PayServiceBinder extends IPay.Stub {
        @Override
        public void pay() throws RemoteException {
            LogUtils.e("PayServiceBinder pay");
            doPay();
        }
    
        @Override
        public void reverse() throws RemoteException {
            LogUtils.e("PayServiceBinder reverse");
            doRerverse();
        }
    }
    
    private void doRerverse() {
        LogUtils.e("PayService doRerverse");
    }
    
    private void doPay() {
        LogUtils.e("PayService doPay");
    }
    

    }

  • 清单文件中的配置

    <service android:name=".PayService">
        <intent-filter>
            <action android:name="com.example.bindserviceaidl.XXXX"/>
        </intent-filter>
    </service>
    
client端
  • 将main/aidl中的aidl目录直接全部复制到客户端的main中

  • 调用如下

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
        private ClientServiceConn mConn;
        private IPay mIBinder;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            addListener();
            bindRemoteService();
        }
    
        private void addListener() {
            findViewById(R.id.tv).setOnClickListener(this);
        }
    
        private void bindRemoteService() {
            Intent service = new Intent();
            service.setAction("com.example.bindserviceaidl.XXXX");
            mConn = new ClientServiceConn();
            bindService(service, mConn, Service.BIND_AUTO_CREATE);
        }
    
        @Override
        public void onClick(View view) {
            switch (view.getId()) {
                case R.id.tv:
                    if (mIBinder != null) {
                        try {
                            mIBinder.pay();
                            mIBinder.reverse();
                        } catch (RemoteException e) {
                            e.printStackTrace();
                        }
                    }
                    break;
            }
        }
    
        private class ClientServiceConn implements ServiceConnection {
    
    
            @Override
            public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
                LogUtils.e("ClientServiceConn onServiceConnected");
                // 这个是远程使用的方式,本地使用可以强制转换
                mIBinder = IPay.Stub.asInterface(iBinder);
            }
    
            @Override
            public void onServiceDisconnected(ComponentName componentName) {
                LogUtils.e("ClientServiceConn onServiceDisconnected");
            }
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值