Java IO
# InputStream InputStream: 输入流的抽象,提供应用程从内存读取任意字节数(read 指针向后偏移),跳过,标记流位置(标记一个索引位置,reset 后,read 指针会重置为 mark 的值),流剩余字节数的 API。 FilterInputStream: 算是装饰者,包装或者聚合了 InputStream ,使用它作为基本的数据源。覆盖 InputStream 所有方法,简单的把方法调用转发给 InputStream 。 a public abstract class InputStream implements Closeable {...
more...Android 触摸事件派发
# Return true at onTouchEvent of the child view during action down The subsequent move and up actions will be dispatched to the child view directly, but the parent views still have a chance to intercept the actions. Once the parent views intercept the touch event during move action by return true...
more...Android view & canvas 坐标系
View 坐标系原点在 parent view 左上角,left, top, right, bottom 是 child view 左上角和右下角相对坐标轴的距离。
more...LifeCycle & LiveData源码剖析
# 生命周期回调方法映射为事件,并派发给 LifeCycle androidx.fragment.app.FragmentActivity#onStart@Overrideprotected void onStart() { super.onStart(); // …… // NOTE: HC onStart goes here. mFragmentLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START);...
more...FragmentManager源码剖析二
# remove & detach Fragment 差别 public void removeFragment(Fragment fragment) { if (DEBUG) Log.v(TAG, "remove: " + fragment + " nesting=" + fragment.mBackStackNesting); final boolean inactive = !fragment.isInBackStack(); if (!fragment.mDetached || inactive)...
more...FragmentManager源码剖析一
# 总结 使用 Fragment 的 Activity 需要继承 FragmentActivity 这里有派发生命周期方法给 FragmentManager,再派发给旗下 Fragment。 加入 Fragment 时,需要判断 savedInstanceState == null ,避免重复创建实例。 add Fragment,初始时,其 Fragment 生命周期方法会被升级到 onStart 状态,随后与 FragmentManager 的状态同步,如果宿主 Activity 是 Resume 状态,则同步至 onResume 状态。 detach...
more...ViewModel源码剖析
# ViewModel 源码剖析 # 示例代码 ViewModel 负责数据存储,借助 LiveData,实现异步获取数据,完成后,通知 UI 观察者,更新 UI public class MyViewModel extends ViewModel { private MutableLiveData<List<User>> users; public LiveData<List<User>> getUsers() { if (users == null) {...
more...