这些年我踩过的坑——Android
16lz
2021-01-26
- PD如果经常要求改入口,使用Adapter + ViewHolder来实现解耦:
- 这两个配合模拟FragmentManager + Fragment的逻辑
- Adapter只负责管理View、对ViewHolder中的生命周期函数进行回调
- ViewHolder不仅保存View的引用,还完整包含与该View有关的所有逻辑,对外暴露相同的生命周期回调函数,例如onViewCreated、onBindView等
- 调整入口仅仅需要在Activity中调整Adapter的Data
- 切记要将ViewHolder与View绑定,如果不绑定就不要复用之前的View,否则空指针
- Json是弱类型,子类Json串填充父类对象将会出现Member丢失的情况
- getSystemService获得Inflater的时候,一定要用Activity的Context,不能用Application Context
- ListView跳转到item的某个位置,需要用setSelectoinFromTop,不能setSelection再scroll。ListView直接scroll会导致跳动和空白item
- ListView中传递的所有关于Position的数据都是包括Header、Footer的,算数要小心
- 在Inflate时,一定要传入parent参数,否则一些依赖父节点的layout参数是不能解析的,详见:这里
- LaunchMode以及ApplicationContext+ActivityContext引发的Task栈混乱问题
- Android/Linux系统是不保存文件创建时间的,如果想拿到文件创建时间,需要用比较tricky的办法。文件名由两部分组成:原始文件名+分隔符+创建时间(1970毫秒).扩展名。原始文件名开头比较容易写Filter
- 反射在Android上真的很慢,ormlite比直接使用sql要慢一倍!
- Activity.runOnUiThread()使用的Handler虽然是Activity的成员变量,其对应的Looper却是Looper.myLooper()。所有runOnUiThread的Runnable即使Activity已经被finish仍然会被执行
- SqliteDatabase.beginTransaction一定要setTransactionSuccessful,否则所有的操作都会取消!!!
- 基本所有使用回调的地方都可以通过KVO来实现,而且直接使用LocalBroadcast能够避免很多内存泄露啊、监听器管理之类的麻烦。
- 应对软键盘遮挡的问题,可以处理四个不同的事件,事件和调用顺序如下:
- onSizeChanged(Activity需要是AdjustResize的)
- onLayout(不用监听onMeasure,回调的位置太多了)
- addOnLayoutChangeListener监听layout的回调事件
- getViewTreeObserver().addOnGlobalLayoutListener监听全局的layout事件
- 据说在App被卸载/停止的时候,jni里fork出来的子线程是不会被停止的。这样就可以干很多流氓的事情了,比如保活之类的
- 有一个很赞的hook,LayoutInflater.Factory提供在原生View的xml里增加新的attribute。例子
关于软键盘的问题:
调起来讲,
((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).
tag为0是默认,SHOW_FORCED在某些rom上会要求用户主动点back才能收起键盘,使用任何一种代码上的hide都不生效,压后台也不生效。理论上是tag越大,show的动作越强
showSoftInput(view, 0);收起来讲,
((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).
tag为0是默认的,最强的是HIDE_NOT_ALWAYS,却仍然不能hide用SHOW_FORCED调起的键盘
hideSoftInputFromWindow(editText.getWindowToken(), 0);
Activity上的Theme之类的都是给Window的DecorView设置的,生效的面积大于Activity的面积(在键盘动画的情况下)
- 设计的时候,各种码、状态类型要统一,尽量使用int,打印也别非转换一下。码类型转换、字符串拼接这种非常耗内存也会增加apk大小
更多相关文章
- Android(安卓)lbs位置服务
- 非常好看的android音量旋钮
- RXJava
- 黑马程序员12——android之事件传播机制
- android appwidget 笔记
- Android滑动事件冲突解决 Touch事件处理机制
- Android-ListView中嵌套(ListView)控件时item的点击事件不起作用
- Android(安卓)recyclerView items的侧滑删除以及点击事件处理
- FrameLayout和RelativLayou上面覆盖View和下方View都响应点击事