正文
首先,我们可以看到官方又提供了三个注释为hide(隐藏)的方法:
/** @hide */ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) @NonNull public static Handler getMain() { if (MAIN_THREAD_HANDLER == null) { MAIN_THREAD_HANDLER = new Handler(Looper.getMainLooper()); } return MAIN_THREAD_HANDLER; } /** @hide */ @NonNull public static Handler mainIfNull(@Nullable Handler handler) { return handler == null ? getMain() : handler; } /** {@hide} */ @NonNull public String getTraceName(@NonNull Message message) { if (message.callback instanceof TraceNameSupplier) { return ((TraceNameSupplier) message.callback).getTraceName(); } final StringBuilder sb = new StringBuilder(); sb.append(getClass().getName()).append(": "); if (message.callback != null) { sb.append(message.callback.getClass().getName()); } else { sb.append("#").append(message.what); } return sb.toString(); }
这最让我注意的就是这个hide的注释,查询了一些相关资料,它们解释:类或API是否开放,是通过doc的注释{@hide}来控制的。这表示不对外公开api,但是系统内部是可以使用该注释标记的接口的。加入了 /** {@hide} */ 注视后的类或者API是google编译时不对外开放的,但是运行的时候这写类和API都是可以访问的。
所以这三个方法应该是类自己使用的,我们不去调用它们。从方法名与方法内部内容也大致可以判断出它们应该是一些关于Handler创建时相关的操作与判断方法,第一个可以返回MAIN_THREAD_HANDLER即主线程Handler,第二个是对Handler对象的null判断后的安全返回,当Handler对象为null是获取getMain(),而不为空则返回自身,第三个方法则内容多一些,从方法名大意是获取跟踪(消息)名,可以返回Message对象的跟踪名。
总结
今天主要还是在构建Handler类的源码位置,没有涉及到我们可以直接调用的方法,下一次也要迈入常用或者重要的方法源码了,未完待续。。。