您的位置:首页 > 移动开发 > Android开发

这些年我踩过的坑——Android

2016-01-29 18:29 375 查看
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)).

showSoftInput(view, 0);
tag为0是默认,SHOW_FORCED在某些rom上会要求用户主动点back才能收起键盘,使用任何一种代码上的hide都不生效,压后台也不生效。理论上是tag越大,show的动作越强

收起来讲,
((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).

hideSoftInputFromWindow(editText.getWindowToken(), 0);
tag为0是默认的,最强的是HIDE_NOT_ALWAYS,却仍然不能hide用SHOW_FORCED调起的键盘

Activity上的Theme之类的都是给Window的DecorView设置的,生效的面积大于Activity的面积(在键盘动画的情况下)

设计的时候,各种码、状态类型要统一,尽量使用int,打印也别非转换一下。码类型转换、字符串拼接这种非常耗内存也会增加apk大小
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: