android 开发坑点记录

这篇博客总结了Android开发中遇到的一些坑点,包括拨号功能的处理、Webview的缓存问题、302重定向、内存泄漏的避免、悬浮窗口管理、文件操作、多界面切换的ANR问题、第三方登录配置、Activity的配置问题、动画兼容性、安装包损坏的排查、HTTPS联网问题、签名问题以及RecyclerView布局问题等,提供了详细的解决办法和参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 拨号功能
    1. 调用拨号界面前需要判断当前设备是否有拨号程序,可使用try-catch捕获打开异常,避免应用闪退
  2. webview开发问题
    1. 缓存问题——没有开启缓存可能导致网页部分功能不能正常使用,而出现异常情况
    2. WebViewClient对象下的方法都为异步回调方法,如果在这些方法有android UI相关操作则需要注意activity关闭时不再执行到相应的操作,比如dialog的关闭操作,在onDestroy()中提前执行,同时dialog的显示和关闭要使用同步锁
    3. url拦截会导致头信息丢失(还可能有其他信息丢失),从而导致一些功能异常,因此需慎用
    4. 关于302重定向问题,还未解决
    5. 避免webView内存泄漏:https://www.jianshu.com/p/3e8f7dbb0dc7 http://blog.youkuaiyun.com/xygy8860/article/details/53334476?utm_source=itdadao&utm_medium=referral
  3. 悬浮窗口问题
    1. 悬浮窗多次添加会导致闪退——在添加或移除悬浮窗的代码外围使用try-catch捕获异常,避免闪退
    2. 悬浮按钮如需全局移动则需要将flags属性设置为FLAG_LAYOUT_IN_SCREEN,但不要同时设置FLAG_LAYOUT_INSET_DECOR,否则在状态栏下悬浮按钮会被遮挡住部分视图
  4. 文件操作问题
    1. 在主线程中执行文件操作在少量4.4机型中可能会出现ANR,因此为了避免ANR,尽量不要在主线程中操作文件
  5. 多界面同时切换问题(android系统bug)
    1. 当当前应用在切换界面的同时也在切换应用的时候,部分机型会出现ANR,当界面频繁快速切换时也有可能出现 —— 尽量避免频繁切换界面且在应用跳转时不要执行界面切换相关操作
  6. 第三方登录:
    1)QQ授权登录的签名配置需要全部小写
    2)微信授权登录的签名配置需要全部大写
    3)注意包名、appID必须和第三方后台配置一至
    4)如果配置信息都一至,还是无法授权,则可能是缓存问题(如:微信缓存了错误的签名票据)
    5)签名的填写千万千万不要手动敲,一定要复制,不然极容易出错(已踩坑,而且是很深很深的坑)
    6)QQ提供的签名获取工具无法获取一些应用的签名,可以使用微信或微博提供的签名获取工具获取
  7. 在manifast文件中配置meta-data数据时,如果属性value的值为一长串的数字,那么必须在前面加上"\ “(斜杠和空格),否则编译之后,该数值会被修改,从而造成错误;如原本value=“1234567890123”,那么应该改成value=”\ 1234567890123",这样编译出来的apk中对应的值才是正确的
  8. 如果出现Activity或一些成员变量莫名其妙被回收变NULL值,则可能是android:configChanges配置不当,Activity被系统回收导致(只有部分机型会出现),示例:跳转第三方支付返回后闪退;QQ、微信授权登录返回后闪退。关于android:configChanges配置说明,请看文章:http://blog.youkuaiyun.com/u012670875/article/details/79626922 ;所以在开发与第三方应用有关联的APP时,必须好好考虑下android:configChanges配置,避免出现异常。
  9. 在开发有多层次的Activity相互跳转销毁时,需要仔细考虑android:launchMode配置问题,避免Activity莫名被回收导致异常闪退,或Activity长时间没被回收而浪费内存;android:launchMode配置相关文章:http://blog.youkuaiyun.com/u012670875/article/details/79626484
  10. android 使用Animation.startNow()启动动画时会有兼容问题,使用View.startAnimation(Animation)启动动画可以解决该问题
  11. app安装时提示安装包损坏,可能的原因有:1.安装包不完整(确实损坏)2.同包名的不同app已经安装在手机上(比如调试时安装的应用)3.已经安装的同包名APP的编译版本较高(比现在要安装的高)3.采用V2签名后,又对包进行了修改 相关文章:https://www.jianshu.com/p/f8bf29393cfa
  12. 使用https协议时,如果使用Apache HttpClient进行联网通讯,则可能在低版本的Android设备上无法联网,提示证书不匹配,需要改为HttpsURLConnection则可以解决。参考文章:https://blog.youkuaiyun.com/wangbaochu/article/details/50915938
  13. app签名相关:在上线三星渠道的时候,会提示签名版本过低不适用的错误,这个时候需要使用apksigner对app进行签名,而不能使用apktool,签名命令:java -jar apksigner.jar sign --ks kestore的路径 --out output.apk input.apk 。 相关的文章:
    https://blog.youkuaiyun.com/mrzhouxu/article/details/79225439
    https://blog.youkuaiyun.com/qq_32115439/article/details/55520012
    https://blog.youkuaiyun.com/lamelias/article/details/53669417
    同问题描述链接:https://stackoverflow.com/questions/45182643/double-signing-apk-sha1-other-issues
    采用v1签名时需要加 -digestalg SHA1 -sigalg MD5withRSA参数,示例:jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore test.keystore -storepass test123 -signedjar signed_client.apk client.apk test,不加的话在某些机型上可能无法安装。相关文章:https://blog.youkuaiyun.com/changcsw/article/details/45643607 文章中说到的-tsa参数,测试时无法访问该参数的链接,不过不加-tsa参数,不影响apk的兼容性。
  14. 为了避免因activity销毁而导致dialog等动态界面显示时闪退问题,对于Activity对象和Context对象的管里必须严格,不要让其他对象(特别是单例对象)直接持有Activity或Context的引用,改成需要使用时动态获取,并且需要有统一的方法判断Activity或Context的生命周期是否是处于可用的状态。
  15. 游戏接入SDK系列之org.jf.util.ExceptionWithContext: Unsigned short value out of range(编译超限问题),需要将多余的smali文件,移到smali_classes2,smali_classes3…等等。相关文章:https://blog.youkuaiyun.com/Cmh_csdn/article/details/81712522
  16. RecyclerView控件列表项布局match_parent属性失效:解决方案(1、https://blog.youkuaiyun.com/ll530304349/article/details/52605202 View view = mInflater.inflate(R.layout.item_agenda_detail, parent, false); 2、itemview设置固定宽度值)
  17. 待补充。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值