App开发建议技巧

开工准备

在项目业务代码开工之前,最好把这些问题都解决掉,否则必将酿成大祸害。它们是:

  • 组件路由
  • 异步处理
  • 组件化模块工程
  • 全局网络拦截器
  • 异常统一处理器
  • 基础视图组件封装
  • 日志记录工具
  • 解决写无数次一模一样代码的模板(如自定义MVP模板)

机型适配

特定的机型上出问题时,别着急。我们可以尝试以下几个办法。

  • 反编译rom,看底层改动(条件略高)
  • 联系该厂商的工程师(如果可以的话)
  • 拷贝整个我们调用api的源码进行单独依赖,而放弃系统内的
  • 逆向在该机型上正常的同类app,参考逆向后的代码实现
  • 参考各个版本不同的Android API变化,可以从源码入手进行对
  • 利用反射获取该特定机型上的某个我们想知道的方法,动态调试

排查崩溃闪退日志:

1.如果app在调试的过程中出现闪退,此时在logcat下日志会被新起来的进程冲刷掉。这时需要把过滤器选择为No filter 把日志级别选为 error即可查看到上一次崩溃的日志。

2.有一种情况是手机并不在我们身边,我们也无法使用调试工具。此时可以接入一些第三方的日志记录工具。在开发状态下不建议使用友盟 360之类sdk,因为很有可能我们的app根本无法连接到网络就崩溃了。 可以选择把日志存到本地文件中。再又使用手机的人发回来。一般这个人是测试。

3.如果app未接入任何日志保存工具,可以在data/anr/目录下查看到所有的ANR异常信息。但需要su权限。否则无法访问到。

APP性能体验优化

1.素材有必要使用压缩后的。推荐熊猫PNG压缩。

2.资源能用代码画尽量使用代码去画,而不要使用静态资源。

3.在复杂的布局上,比如很多app的首页需要加载不同类型的item。使用了RecyclerView多类型加载,刷新数据时一定要使用单独对item刷新api。切勿使用notifyitemchanged()方法,这里要用两个参数的notifyItemChanged(1,"gfg")方法。

4.数据懒加载,或排队加载

5.混淆可以使包减小含:(xml 资源 class等)

6.如果玩得不是很6,尽量不要写静态引用,匿名内部类这种会导致内存泄漏的东西。如果很担心自己失误的写了,一定要去分析它们,把他们揪出来。

7.Activity的层级不要太深。过深会在低内存设备上被回收栈底的。

建议和技巧

1.发现某处代码可以复用性的封装一下或者改良一下会更好的时候一定要乘早,不要拖延。(烂泥巴只会越来越烂,后面改=永远没可能)

2.debug编译期间可以把用不到的abi过滤掉,会让我们加速部署。

3.尽量保持较新的 support library依赖。因为较高的版本中修复了一些bug。

4.接入第三方包时,最好与自身模块保持独立,做到随时解耦,随便复用。

接入第三方包时,最好与自身模块保持独立,做到随时解耦,随便复用。可能很多人不理解:举个例子,如果需要将imgloader替换成fresco,若之前独立出自己的方法,则会很简单,否则得一个个替换,贼麻烦。

5.多个native库依赖时,若发现某些abi上不支持,那么就需要保持最小的abi。否则会给某些机型优先读取它更合适的架构。会造成灾难性的崩溃。如:ARM文件夹中含两个so,ARMv8中只有一个。届时手机优先加载了ARMV8的情况下,将带来找不到so库的崩溃异常。

6.不要太随性的引入第三方依赖库,如果只是用了很小一部分功能,建议剥出来自己封装。

7.第三方的包含私有api为暴露时,记得用反射去实现。当然这一切需要我们能翻他们的sdk源码读。也许被混淆了。这时就可以使用动态调试去跟踪。

8.多数情况下官方的support包比第三方要好得多。只是我们不知道,或者不熟悉。

9.渐变图、纯色图、带一根线的图用shape,不要静态图。会引发血案!

10.当无法通过搜索解决问题的时候,读源码是最快的解决思路。千万不要瞎猜和尝试随缘写代码来解决问题。

11.封装控件时注意对资源类型做校验
如:Image.setImageResource(img);
这里的img需要做强校验,类型检测,防止别人用的时候不小心写错了。因为如果我们不主动抛出异常。靠LayoutInflater通过反射去解析xml时提示出了的错误日志非常难看。一般还会伴随一大堆调用栈和闪退出现。

12.冷启动优化,不要在Application启动时里做过多的任务&第一个Activity里也是一样。最好把初始化的白屏Window设上一张图片过渡一下。

(0)

相关推荐

  • App开发建议技巧

    开工准备 在项目业务代码开工之前,最好把这些问题都解决掉,否则必将酿成大祸害.它们是: 组件路由 异步处理 组件化模块工程 全局网络拦截器 异常统一处理器 基础视图组件封装 日志记录工具 解决写无数次一模一样代码的模板(如自定义MVP模板) 机型适配 特定的机型上出问题时,别着急.我们可以尝试以下几个办法. 反编译rom,看底层改动(条件略高) 联系该厂商的工程师(如果可以的话) 拷贝整个我们调用api的源码进行单独依赖,而放弃系统内的 逆向在该机型上正常的同类app,参考逆向后的代码实现 参考

  • 微信小程序开发实用技巧之数据传递和存储

    结合自己在平时的开发中遇到的各种问题,和浏览各种问题的解决方案总结出一些自己在日常开发中常用的技巧和知点,希望各位不吝斧正. 1.短生命周期数据存储 以小程序启动到彻底关闭为周期的的数据建议存储在app.js文件夹中,引用app.js: const app =getApp(); 假设Value是在小程序本次生命周期中经常使用到的一个数据,比如说请求API的Token,动态的令牌等.那么就可以把这个值赋值到全局变量中去.实际上,并不是只有app.js中的globalData是全局变量,可以自己定义

  • Lottie动画前端开发使用技巧

    目录 一.为什么会有Lottie动画呢? 二.Lottie介绍 三.Lottie常见属性和方法 四.封装Lottie - React Hooks版 五.Lottie组件的引入与调用 结语 一.为什么会有Lottie动画呢? 在前端程序员根据UI视觉稿实现页面效果时一直存在这样的一种“矛盾” - 动画效果更完美与工期成本的矛盾.一般来说,页面中包含的动画效果越复杂,前端程序员在实现时需要的工期成本越大,尤其是在官网.大促活动.活动拉新等包含巨多动画效果的场景中,动画实现需要的时间占据了大部分工期时

  • 人人都是开发者:7款傻瓜式APP开发工具

    谷歌推出的App Inventor Android App开发工具可以让你仅通过拖拉式的简单操作就可以创建自己的Android App.对于那些为了特定目的想要动手尝试开发一个简单应用的用户,除了App Inventor其实还有很多其他的选择,比如下面介绍的5款工具就可以让所有人都能轻松开发手机应用.不过如果你真想做个专业的开发者,还是像lion一样踏踏实实从基础学起比较好. 国外的营销工作者和技术开发者开发了许多能帮助企业创建简单APP应用的工具,通过这些工具,就算是一个对程序一窍不通的普通网

  • Android 6.0指纹识别App开发案例

    在android 6.0中google终于给android系统加上了指纹识别的支持,这个功能在iPhone上早就已经实现了,并且在很多厂商的定制的ROM中也都自己内部实现这个功能了,这个功能来的有点晚啊.在google全新发布的nexus设备:nexus 5x和nexus 6p中都携带了一颗指纹识别芯片在设备的背面,如下图(图片来自网络): 笔者手中的设备就是图上的那台黑色的nexus 5x,话说这台机器很是好看呢!手感超棒! 废话不多说,下面我出一个指纹识别的demo app,并且详细说明怎么

  • app开发之原生开发、H5开发和混合开发的区别

    APP开发模式 目前市场上主流的APP分为三种: 原生APP Web APP(即HTML5) 混合APP 当然,还有flutter等 APP开发模式对比 1. 原生开发 原生开发(Native App开发),是在Android.IOS等移动平台上利用官方提供的开发语言.开发类库.开发工具进行App开发.比如Android是利用Java.Eclipse.Android studio:IOS是利用Objective-C 和Xcode进行开发. 优点: 可访问手机所有功能(如GPS.摄像头等).可实现

  • 一看就懂的Android APP开发入门教程

    工作中有做过手机App项目,前端和android或ios程序员配合完成整个项目的开发,开发过程中与ios程序配合基本没什么问题,而android各种机子和rom的问题很多,这也让我产生了学习android和ios程序开发的兴趣.于是凌晨一点睡不着写了第一个android程序HelloAndroid,po出来分享给其他也想学习android开发的朋友,这么傻瓜的Android开发入门文章,有一点开发基础的应该都能看懂. 一.准备工作 主要以我自己的开发环境为例,下载安装JDK和Android SD

  • iOS直播类APP开发流程解析

    本文为大家分享了iOS直播类APP开发流程,供大家参考,具体内容如下 一 . 音视频处理的一般流程: 数据采集→数据编码→数据传输(流媒体服务器) →解码数据→播放显示 1.数据采集: 摄像机及拾音器收集视频及音频数据,此时得到的为原始数据 涉及技术或协议: 摄像机:CCD.CMOS 拾音器:声电转换装置(咪头).音频放大电路 2.数据编码: 使用相关硬件或软件对音视频原始数据进行编码处理(数字化)及加工(如音视频混合.打包封装等),得到可用的音视频数据 涉及技术或协议: 编码方式:CBR.VB

  • android使用webwiew载入页面使用示例(Hybrid App开发)

    Hybrid App 是混合模式应用的简称,兼具 Native App 和 Web App 两种模式应用的优势,开发成本低,拥有 Web 技术跨平台特性.目前大家所知道的基于中间件的移动开发框架都是采用的 Hybrid 开发模式,例如国外的 PhoneGap.Titanium.Sencha,还有国内的 AppCan.Rexsee 等等.Hybrid App 开发模式正在被越来越多的公司和开发者所认同,相信将来会成为主流的移动应用开发模式. Hybrid App 融合 Web App 的原理就是嵌

  • Android开发小技巧篇之集合

    1.对于过多的控件,功能类似,数量又多的,可以用include方法.在实现应用中,可以把控件放入List集合中. private void initView() { // TODO Auto-generated method stub pwd1 = (EditText) findViewById(R.id.pwd_et_6_1); pwd2 = (EditText) findViewById(R.id.pwd_et_6_2); pwd3 = (EditText) findViewById(R.i

随机推荐