EventBus源码阅读(6)-AbstractSubscriberInfo

来源:互联网 发布:工程数据的内涵 编辑:程序博客网 时间:2024/05/22 06:36

看了SubscriberInfo的接口定义,现在来看看抽象实现:

AbstractSubscriberInfo


源码:

/* * Copyright (C) 2012-2016 Markus Junginger, greenrobot (http://greenrobot.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.greenrobot.eventbus.meta;import org.greenrobot.eventbus.EventBusException;import org.greenrobot.eventbus.SubscriberMethod;import org.greenrobot.eventbus.ThreadMode;import java.lang.reflect.Method;/** Base class for generated subscriber meta info classes created by annotation processing. */public abstract class AbstractSubscriberInfo implements SubscriberInfo {    private final Class subscriberClass;//订阅的类,就是我们直接定义(onMainThreadEvent)方法的类(Activity)    private final Class<? extends SubscriberInfo> superSubscriberInfoClass;//订阅类的父类    private final boolean shouldCheckSuperclass;    protected AbstractSubscriberInfo(Class subscriberClass, Class<? extends SubscriberInfo> superSubscriberInfoClass,                                     boolean shouldCheckSuperclass) {        this.subscriberClass = subscriberClass;        this.superSubscriberInfoClass = superSubscriberInfoClass;        this.shouldCheckSuperclass = shouldCheckSuperclass;    }    @Override    public Class getSubscriberClass() {        return subscriberClass;    }    @Override    public SubscriberInfo getSuperSubscriberInfo() {        if(superSubscriberInfoClass == null) {            return null;        }        try {            return superSubscriberInfoClass.newInstance();        } catch (InstantiationException | IllegalAccessException e) {            throw new RuntimeException(e);        }    }    @Override    public boolean shouldCheckSuperclass() {        return shouldCheckSuperclass;    }    //构造SubscriberMethod,使用(方法名,参数类型),默认处理模式为Posting,优先级0,非粘性    protected SubscriberMethod createSubscriberMethod(String methodName, Class<?> eventType) {        return createSubscriberMethod(methodName, eventType, ThreadMode.POSTING, 0, false);    }    //<span style="font-family: Arial, Helvetica, sans-serif;">构造SubscriberMethod,使用(方法名,参数类型,消息处理模式),默认优先级0,非粘性</span>    protected SubscriberMethod createSubscriberMethod(String methodName, Class<?> eventType, ThreadMode threadMode) {        return createSubscriberMethod(methodName, eventType, threadMode, 0, false);    }<pre name="code" class="java">    //<span style="font-family: Arial, Helvetica, sans-serif;">构造SubscriberMethod,使用(方法名,参数类型,消息处理模式,优先级,是否粘性)</span>
protected SubscriberMethod createSubscriberMethod(String methodName, Class<?> eventType, ThreadMode threadMode, int priority, boolean sticky) { try { Method method = subscriberClass.getDeclaredMethod(methodName, eventType); return new SubscriberMethod(method, eventType, threadMode, priority, sticky); } catch (NoSuchMethodException e) { throw new EventBusException("Could not find subscriber method in " + subscriberClass + ". Maybe a missing ProGuard rule?", e); } }}


主要实现了构造SubscriberMethod的基础方法。


0 0