老司机为何能够成为老司机,不是因为开车开得多,而是撸多了…

0x00 使用 startActivityForResult 后在 onActivityResult 中没有正确回调到 Activity.RESULT_OK

1. 要正确获取到 RESULT_OK 的状态码,Activity 的启动模式不能为设置为的 singleTask 或者 singleInstance

2. 调用 startActivityForResult(intent,requestCode) 方法时第二个参数不应该使用过大的整数,例如超过 65535

0x01 Activity 的 onCreate() 方法中操作 View 相关

1. 不能直接获取 View的宽高,而应在 view.post() 里面操作

2. 不能调用 PopupWindowshow 方法显示,也应在 view.post() 里面操作

0x02 TransactionTooLargeException 异常

这个错误主要发生在 Intent 中传递了大量的数据。
例如有一个 Activity 页面跳转中,经常会使用 Intent 传递数据,但是稍不留神就会把一个很大的对象(列表,bitmap 等)传递过去,这时候就会出现这个异常。
建议不要在 Intent 中传递大数据,应该使用持久化的方式共享数据。而且数据过多也会影响Activity 的启动速度。
类似问题 startActivity() 时发生以下错误

java.lang.SecurityException: Unable to find app for caller android.app.ApplicationThreadProxy。This log means that your app is having trouble handling a communication intent. Sometimes problems like this can be cause by sending an intent with big extras. Try to reduce the dimension of the image or, and this is the best way, save your image on the sd and put in the extras only the Uri of that image。
即不要在 Intent 中传递大量的数据数据,否则会抛异常。

0x03 FragmentTransaction.setCustomAnimations() 后动画没有效果

setCustomAnimations 要在 replace()add() 或 remove() 等对 Fragment 添加或者移除的方法前面。

0x04 应用使用多进程应该注意的问题

1. Application 会被初始化多次,即 onCreate() 方法会执行多次。在这里的一些初始化逻辑,例如数据库初始化,就需要根据判断当前进程的名称来进行初始化。

2. 主进程与子进程数据共享的问题。由于不存在同一个内存空间,数据共享可以考虑使用 ContentProvider

0x05 应用打包后 H5 无法访问到 WebView 与 JS 交互的自定义 JSBridge 类

WebView 通过 addJavascriptInterface() 注入本地实现的方法类 JsBridge 供 H5 访问,但是打包时应该把自定义的 JSBridge 类加入到混淆规则里面,否则混淆后 H5 将有可能无法访问本地方法。

0x06 App 端使用 WebView.loadUrl() 执行 JS 方法后无响应

1. WebView 通过 loadUrl() 执行 JS 方法后却无响应,但是前端确定已提供。这时候应该考虑使用主线程(例如 WebView.post() )来执行 loadUrl()

2. 通过 H5 调用本地方法时,如果 H5 是异步调用,那么也应该考虑把本地方法的实现放在主线程中。

0x07 UI 控件的样式出现了很奇诡的渲染,例如花屏、闪动等的问题

1. 有些机型使用硬件加速出现了一些奇诡的UI问题,可以检查一下控件所在 Activity 是否配置了硬件加速,多数情况下去掉硬件加速就 OK 了。
2. 如果需要硬件加速的配置,可以考虑在控件本身上使用,而不是 Activity 上。

0x08 Activity 与 Fragment 控件 ID 重复的问题

Activity 中使用 FragmentActivity 中有一个控件 ID 为 R.id.widget_btn ,但是在 Fragment 里面也有一个控件 ID 为 R.id.widget_btn ,那么在 Fragment 里面使用 getActivity().findViewById() 时就无法取到正确的控件引用。

0x09 WebView 无法弹起 H5 中的 alert 和 comfirm 对话框的问题

WebView 是一个承载体,各种内容的渲染需要使用 WebViewChromClient 去实现,所以需要设置一个默认的 WebChromeClient 实现。但是一般情况下实现自定义 WebView 都会重写 onAlertonConfirm 方法,使用 AlertDialog 来展示 H5 中的 alert 或者 confirm 对话框。

0x10 GridView 中的 Item 无法居中问题

查看一下 GridView 的布局文件是否设置了 android:scrollbarStyle="outsideInset" 属性,如果有,去掉这个属性。

0x11 EditText textCursorDrawable 属性直接用 color 在很多手机上光标是不会闪动

需要用 drawable 来设置这个属性,写一个 drawable 文件,例如

<shape xmlns:android="http://schemas.android.com/apk/res/android"                    android:shape="rectangle" >
<solid android:color="@color/white" />
<size android:width="1dp" />
</shape>

0x12 在 ListFragment 中 set footer 后 java.lang.IllegalStateException问题

不要 ListFragmentonCreateView() 中设置 footer ,要在 onActivityCreate() 中设置,否则会 Caused by: java.lang.IllegalStateException: Content view not yet created

0x13 开源项目 TabPageIndicator Tab 默认情况只显示 6 个中文字符,过多的字符被截断了

可修改 TabView 中的 mMaxTabWidth 的值,默认时 mMaxTabWidth = (int) (MeasureSpec.getSize(widthMeasureSpec) * 0.4f); 修改为 mMaxTabWidth = (int) (MeasureSpec.getSize(widthMeasureSpec) * 1f);

0x14 SpannableStringBuilder 修饰文本影响 ListView 性能问题

通常需要在一个列表中对 Item 的文本作一些特殊的修饰处理,例如对文本添加简单的图标,文本颜色,字体高亮等等效果,这时候 SpannableStringBuilder 就可以帮上忙了。但如果在 getView() 方法里构造 Spannable 对象,明显会影响列表的展示的效率,应该在线程中先这些 Spannable 数据构造好,而 getView() 尽量少做影响列表性能的操作。

微信关注我们,可以获取更多

老司机带路——15个Android撸代码常见的坑的更多相关文章

  1. 老司机带路:《axios从入门到开车 嘀嘀~~》

    前言:axios vue.axios 跨域.axios.js.axios get.axios post.axios中文文档 之前当vue更新到2.0之后,作者就宣告不再对vue-resource更新, ...

  2. STM32代码常见的坑

    1 混淆换行符\和除号/造成的坑 入坑代码: GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin ...

  3. 有容云:上车 | 听老司机谈Docker安全合规建设

    编者注: 本文根据7月19日DockOne社群分享内容整理而成,分享嘉宾蒋运龙,有容云高级咨询顾问,一个IT的老兵,十年来混迹于存储.三网融合.多屏互动.智能穿戴.第三方支付.Docker等行业:经历 ...

  4. 老司机带你体验SYS库多种新玩法

    导读 如何更加愉快地利用sys库做一些监控? 快来,跟上老司机,体验sys库的多种新玩法~ MySQL5.7的新特性中,非常突出的特性之一就是sys库,不仅可以通过sys库完成MySQL信息的收集,还 ...

  5. Android使用WebView开发常见的坑

    原文链接:http://mp.weixin.qq.com/s?__biz=MzAwODE1NTI2MQ==&tempkey=uP3a%2BOgIN7vPbLfJp3BTCl2KabYi1%2F ...

  6. 老司机告诉你高质量的Java代码是怎么练成的?

    一提起程序员,首先想到的一定是"码农",对,我们是高产量的优质"码农",我们拥有超跃常人的逻辑思维以及不走寻常路的分析.判别能力,当然,我们也有良好的编码规范, ...

  7. Android老司机搬砖小技巧

    作为一名Android世界的搬运工,每天搬砖已经够苦够累了,走在坑坑洼洼的道路一不小心就掉坑里了. SDK常用工具类 Android SDK中本身就拥有很多轮子,熟悉这些轮子,可以提高我们的搬砖效率. ...

  8. 老司机谈APK瘦身套路-图片资源篇

    APK作为Android系统安装包的文件格式,一直备受广大用户的关注,APK越是臃肿肥大,在下载安装过程中,它们耗费的流量会越多,安装等待时间也会越长:对于产品本身,意味着下载转化率会越低(因为竞品中 ...

  9. 老司机学新平台 - Xamarin开发之我的第一个MvvmCross跨平台插件:SimpleAudioPlayer

    大家好,老司机学Xamarin系列又来啦!上一篇MvvmCross插件精选文末提到,Xamarin平台下,一直没找到一个可用的跨平台AudioPlayer插件.那就自力更生,让我们就自己来写一个吧! ...

随机推荐

  1. Apache工作原理

                            Apache工作原理 在开始了解Apache前,我们先熟悉一下web服务器,因为apache也是web服务器的一种. Web系统由客户端(浏览器)和服务 ...

  2. Swift2.0 函数学习笔记

    最近又有点忙,忙着找工作,忙着适应这个新环境.现在好了,上班两周周了,也适应过来了,又有时间安安静静的就行我们前面的学习了.今天这篇笔记,记录的就是函数的使用.下面这些代码基本上是理清楚了函数的额使用 ...

  3. 毕向东udp学习笔记1

    参看了毕向东老师的视频教程,准备直接用EditPlus记事本来直接敲Java代码,好好学习一下udp部分,GUI部分,线程部分,加油 项目功能: 实现udp简单的发送接收功能. 当使用EditPlus ...

  4. CSS之浏览器默认样式设置

    今天自己写css样式时,其中用到了<ul>标签,设置了一系列效果后运行,发现位置与设置有出入.chrome上打开检查项,发现<ul>标签的styles底部多了以下一段: ul, ...

  5. Ioc容器BeanPostProcessor-Spring 源码系列(3)

    Ioc容器BeanPostProcessor-Spring 源码系列(3) 目录: Ioc容器beanDefinition-Spring 源码(1) Ioc容器依赖注入-Spring 源码(2) Io ...

  6. Extjs 数据代理

    Ext.data.proxy.Proxy 代理类的根类 客户端代理: 1.LocalStorageProxy:将数据存储在localStorage中,此种方式可以持久的将数据存储在客户端 要使用代理, ...

  7. 使用jquery的load方法设计动态加载,并解决被加载页面JavaScript失效问题

    一.问题分析 对于后台系统,相比大家都有所印象,知道其中的布局结构,如图: 在这种布局中我们需要将header,sidebar,footer分开,而且对于中间部分的content内容需要动态变化,即根 ...

  8. Mixin模式:带实现的协议

    Mixin(织入)模式并不是GOF的<设计模式>归纳中的一种,但是在各种语言以及框架都会发现该模式(或者思想)的一些应用.简单来说,Mixin是带有全部实现或者部分实现的接口,其主要作用是 ...

  9. nginx负载均衡2

    负载均衡2 网站是发展初期,nginx只代理了后端一台服务器,但由于网站名气大涨访问的人越来越多一台服务器实在是顶不住,于是我们加了多台服务器,那么多台服务器又怎么配置代理呢,这里以两台服务器为案例, ...

  10. 超出区域文字显示为省略号或者剪切效果——CSS的生僻操作

    每门语言总有那么一些不太常用,却又不可或缺的语法操作.下面说一下,在HTML文件中,如何设置用 "省略号" 和 "剪切" 代替大量文字的效果. 以下是HTML的 ...