Bug记录

  1. TabLayout如果不设置tabIndicatorColor会抛如下异常
android.view.InflateException: Binary XML file line Error inflating class <unknown>...
Caused by: java.lang.RuntimeException: Failed to resolve attribute at index 0 at android.content.res.TypedArray.getColor(TypedArray.java:422)
  1. 在MIUI上发现某个横向的RecycleView不显示,但其他页面的横向RecycleView或者其他机型上都会显示。
    最后通过调试得出是recycleView中textView不知道因为什么原因没有显示(估计是MIUI的ROM在layout时的一个bug),所以解决方案是给textview设置固定高度。之前也遇到过测试反馈说在Nexus上和硬件的连接不稳定,开始也当兼容性bug来解决,最后终于发现是这台Nexus自身的wifi有问题 /(ㄒoㄒ)/~~

  2. TextView显示中英文数字混合的字符串时的bug.
    在TextView设置了

android:maxLines="1"
       android:ellipsize="end"

要显示的字符串是“更新至:鸽子和猎人+ThereWereNinetyAndNine”
预期显示“更新至:鸽子和猎人+ThereWereNinetyAnd。。。”,但最后显示“更新至:鸽子和。。。”
解决方案是加上
android:singleLine = "true"

It is a huge 坑

  1. ConcurrentModificationException
    字面意思就是在遍历的时候容器执行了写操作或者有并发的写操作。所以解决方案是保证遍历过程中没有对容器进行操作;或者用iterator的方法(比如iterator.move)执行写操作,但每次只能有一个iterator进行写操作,也就是要考虑并发,如何处理并发?用Concurrent容器类或者用sychronized修饰方法。最后,如果生成iterator之后,用容器自己的API(如list.add)执行写操作,那么调用iterator遍历也会报ConcurrentModification错误。
    原理参考

  2. exception: android.os.BinderProxy cannot be cast to...
    解决方案:

  3. cast之前用 instance of 判断。如果exception发生在Application里,也可以判断当前Application是不是默认Application

  4. 在Activity里而不是在Application里调用bindService

  5. 使用AIDL

  6. 在华为荣耀H60-L02上,设置了TextView的layout_alignParentBottom属性(父布局和爷爷布局都是RelativeLayout),但不起作用。解决方法是设置爷爷布局的layout_height属性为固定值。(ROM的兼容性bug)

  7. 在FrameLayout中重叠的两个surfaceview,在8.0以前是第一个定义的surfaceview处于window的最上层,会覆盖住第二个surfaceview。而8.0上则相反,不造为什么这么设计,网上没找到资料。
    可以通过给其他一个surfaceview设置半屏的size可以看哪个surfaceview在顶部。
    通过SurfaceView.setZOrderMediaOverlay(true)可以强制某个SurfaceView显示在另一个的顶部

  8. 为了更好的分析bug,可以把log保存到文件中分析。拦截监听系统log的方法:

 var filePath = Environment.getExternalStorageDirectory().getAbsolutePath()+"/myLog.txt"
  Runtime.getRuntime().exec(arrayOf("logcat", "-f", filePath,"*:S", "MyLogTag1:V","MyLogTag2:V"))
  1. Scrollview的子View设置了MarginTop,且长度超过一屏,就会滑不到底,只要不设置marginTop而是在Scrollview上设置paddingTop就可以了

  2. 如果RecyclerView的父辈布局有ScrollView,NestedScrollView,可能会导致RecyclerView滑动卡顿。
    解决方案是设置setNestedScrollingEnabled(false), 当然前提是不需要此RecyclerView的嵌套滑动。

  3. 在webView中打开微信文章的url,文章中的超链接点击可以跳转,但是“阅读原文”点击了不能跳转。
    解决方案是设置

webView.settings.domStorageEnabled = true;

推测原因如下:
“阅读原文”的跳转地址是通过js代码动态设置的:

document.getElementById('js_view_source').href=window.msg_source_url;

而这段js可能用到了localStorage,安卓目前因为安全性考虑,默认关闭localStorage功能。因此这段js就不能执行成功,导致“阅读原文”的跳转也没有设置,就点击没反应了。
像类似的问题可以通过Chrome Inspcet Device排查原因。
webView的通用设置如下:

 //防止硬加速导致动画卡顿
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null)
        }
        webView.settings.javaScriptEnabled = true
        webView.settings.domStorageEnabled = true;
        webView.webChromeClient = WebChromeClient()
        webView.webViewClient = MyWebViewClient()

 private inner class MyWebViewClient : WebViewClient() {
        override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
            view.loadUrl(url)
            return true
        }
    }

 override fun onBackPressed() {
        if (webView != null && webView.canGoBack()) {
            webView.goBack() // goBack()表示返回WebView的上一页面
            return
        }
        super.onBackPressed()
    }

override fun onDestroy() {
        super.onDestroy()
        if (webView != null) {
            val parent = webView.getParent() as ViewGroup
            parent.removeView(webView)
            webView.removeAllViews()
            webView.destroy()
        }
    }
  1. 如果targetVersion设置成了22或以下,默认权限是全部授予的,但是可能会被用户手动取消。
    这时候checkSelfPermission永远返回true,requestPermissions方法也不会弹出权限对话框,只能是引导用户去设置页授予应用权限
    http://blog.csdn.net/happylishang/article/details/78222788
    https://stackoverflow.com/questions/35484767/activitycompat-requestpermissions-not-showing-dialog-box
  1. 使用SimpleDraweeView,加载某些图片会模糊(大图加载)

之前为了解决图片太大,无法在某些安卓机上加载,就启用了向下采样,也就是setDownsampleEnabled(true)
但是发现新人问答这张图 (像素值750*3000) 加载了比较模糊。后来调试不同长宽和格式的图片,觉得是因为新人问答这张图要显示的长度很长,不采样可以正常显示,采样像素值就不够了, 所以显示模糊。
在网上查找资料,包括GitHub和StackOverFlow。虽然有人遇到到这样的
问题,但还没有解决的方法。虽然有妥协的方案,就是不采样,然后遇到加载不了的图,就让UI把图片的像素值调低一些,但最后还是觉得看下源码。最后调试源码时,得到了如下解决方案:
可以设置多大的图片才需要采样,比如模糊的图的最大维度(宽或长上面的像素值,取较大值)是3000,只要设置ResizeOptions的maxBitmapSize为3000以上,比如我设置成4000。这样只有最大维度是4000以上,才会采样。而4000已经是比较高的值了,新人问答图如果还要变的更长,超过4000的像素值,就需要调整图片的长宽比以适应屏幕比例,或者图片内容不变的情况下增大像素值。这样屏幕适配缩放后,仍有较高的像素密度,也就不怕采样了。
这个解决方案的缺陷是不能直接按最终展示的图片的像素密度决定是否采样,而是根据原始图片的最大像素维度,但解决问题是OK的。

  1. Webview无法点击微信文章的阅读原文
    虽然设置了支持跳转,但仍然无法点击“阅读原文”,通过查看微信文章的js源码,发现“阅读原文”对应的链接是通过执行js代码动态绑定的。然后搜索此超链接的字段名,搜到一篇文章,说要设置
    webView.settings.domStorageEnabled = true;
    尝试此方案后解决。但仍需要了解为什么能解决:是因为设置“阅读原文”超链接的js代码,会用到domStorage属性,如果没有启用,执行这段js就抛异常,导致后面设置链接的代码没有执行。
    这样的异常信息在PC端可以在浏览器的开发者工具中看到,在安卓端则需要用Chrome Inspcet Device调试
    所以下次遇到Webview相关的问题,可以通过Chrome Inspcet Device来排查,也可以看看是不是js代码没有执行成功导致的。

  2. System.loadlibrary时出现UnsatisfiedLinkError的几种原因:
    The Perils of Loading Native Libraries on Android

What exactly is "com.google.android.packageinstaller"
com.android.vending is the package name of Google Play Store. However, in Android, the apps installed outside from Google Play (from apk file) are installed through another system app embedded in every android phone. It is called Package Installer. com.google.android.packageinstaller represents the Package Installer system app, so you can completely say that users caught with com.google.android.packageinstaller are those who installed the app from an apk file, downloaded from anywhere else

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351

推荐阅读更多精彩内容