endian11
2019-09-19 a4d1aa42cd38b6118c37eee75c5f8a381f5fbb36
lib/src/main/java/com/anyun/exam/lib/AYSdk.java
@@ -18,13 +18,11 @@
    private static final String TAG = "AYSDK";
    private IAYExamListener mCallback;
    //远程服务接口
    private IRemoteInterface remoteInterface;
    //安运驾考系统 sdk 单例模式
    private  volatile static  AYSdk ourInstance = null;
    private Context mContext;
    private MyServiceConn conn;
    public static AYSdk getInstance() {
        if (ourInstance == null){
@@ -44,9 +42,7 @@
    public void init(Context context){
        this.mContext = context;
        //bind service
        Intent intent = new Intent(mContext,RemoteService.class);
        conn = new MyServiceConn();
        mContext.bindService(intent,conn,Context.BIND_AUTO_CREATE);
    SvrManager.getInstance().bindRemoteService(mContext);
    }
@@ -56,15 +52,8 @@
     */
    public void uninit(){
        if (mContext != null){
            if (remoteInterface!=null && remoteInterface.asBinder().isBinderAlive()){
                try {
                    remoteInterface.unRegistListener(RemoteCallback);
                } catch (RemoteException e) {
                    e.printStackTrace();
                }
            }
            mContext.unbindService(conn);
        //UnbinService
            SvrManager.getInstance().unBindRemoteService(mContext);
        }else{
            Log.e(TAG,"mContext == null,please init SDK firstly");
            throw new RuntimeException("mContext == null,please init SDK firstly");
@@ -75,20 +64,6 @@
    }
    /**
     * 远程服务回调通知客户端消息
     */
    IListenerInterface RemoteCallback = new IListenerInterface.Stub(){
        @Override
        public void onMessageArrived(String json) throws RemoteException {
                if (mCallback != null){
                    mCallback.callBackMsg(json);
                }
        }
    };
    @Override
    public void checkSignal(int type) {
@@ -97,65 +72,17 @@
    @Override
    public void add() {
        if (!checkRemoteIsNull()){
            try {
                remoteInterface.add();
            } catch (RemoteException e) {
                e.printStackTrace();
            }
        }
        SvrManager.getInstance().add();
    }
    @Override
    public void registListener(IAYExamListener iayExamListener) {
        this.mCallback = iayExamListener;
    }
    /**
     * 检查远程服务是否可以使用
     * @return 可以用false,不可以用true
     */
    private boolean checkRemoteIsNull() {
        return remoteInterface==null?true:false;
    }
    class MyServiceConn implements ServiceConnection {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
             remoteInterface = IRemoteInterface.Stub.asInterface(service);
            try {
                //设置死亡代理
             service.linkToDeath(mDeathRecipient,0);
                remoteInterface.registListener(RemoteCallback);
            } catch (RemoteException e) {
                e.printStackTrace();
            }
        }
        @Override
        public void onServiceDisconnected(ComponentName name) {
        }
        SvrManager.getInstance().registerListener(iayExamListener);
    }
    /**
     * Binder断裂回调
     * 如果服务端进程由于某种异常原因停止
     */
    private IBinder.DeathRecipient mDeathRecipient = new IBinder.DeathRecipient() {
        @Override
        public void binderDied() {
            Log.e(TAG,"IBinder.DeathRecipient binderDied");
            if (remoteInterface != null){
                Log.e(TAG,"IBinder.DeathRecipient binderDied remoteInterface != null ,return");
                return;
            }
            remoteInterface.asBinder().unlinkToDeath(mDeathRecipient,0);
            remoteInterface = null;
        }
    };
}