Android笔记(异常、性能优化、代码规范、省电方面、tcp和udp区别、同步和异步)

1、 SQLException:操作数据库异常类。 问题:当Java应用程序与数据库进行沟通时如果产生了错误,就会触发这个类。同时会将数据库的错误信息通过这个类显示给用户。当用户插入数据的时候,如果这个字段的值跟现有的纪录重复了,违反了数据库的唯一性约束,此时数据库就会跑出一个异常信息。这个信息一般用户可能看不到,因为其发生在数据库层面的。此时这个操作数据库异常类就会捕捉到数据库的这个异常信息,并将这个异常信息传递到前台。如此的话,前台用户就可以根据这个异常信息来分析发生错误的原因。 解决方案:检查插入的数据是否重复。

2、 ClassCastException:数据类型转换异常。 问题:在Java应用程序中,有时候需要对数据类型进行转换。这个转换包括显示的转换与隐式的转换。不过无论怎么转换,都必须要符合一个前提的条件,即数据类型的兼容性。在数据类型进行转换之前,就保证数据类型的兼容性。如此的话,就不容易造成数据类型的转换异常。如在只允许数值类型的字段中,可以设置不允许用户输入数值以外的字符。 解决方案:注意相应的组件在初始化的时候,是否相对应。

3、 NumberFormatException:字符串转换为数字类型时抛出的异常。 在数据类型转换过程中,如果是字符型转换为数字型过程中出现的问题,对于这个异常在Java程序中采用了一个独立的异常,即NumberFormatException.如现在讲字符型的数据“123456”转换为数值型数据时,是允许的。但是如果字符型数据中包含了非数字型的字符,如123#56,此时转换为数值型时就会出现异常。系统就会捕捉到这个异常,并进行处理。 解决方案:检查数据是否正确。

4. java.lang.NullPointerException (1).如果使用第三包的jar包,jar包中有错误 (2).没有实例化组件 (3).没有把Adapter和值绑定; (4).当页面中某个组件赋值为null时activity会出现错误,程序崩溃后其他页面的数据就会被重新初始化 (5).用Intent传值时,获取的key不存在 (6).没有赋初始值

5. java.lang.ClassNotFoundException  异常的解释是"指定的类不存在"。

6. java.lang.ArithmeticException  这个异常的解释是"数学运算异常",比如程序中出现了除以零这样的运算就会出这样的异常。

7. java.lang.ArrayIndexOutOfBoundsException   异常的解释是"数组下标越界",现在程序中大多都有对数组的操作,因此在调用数组的时候一定要认真检查,看自己调用的下标是不是超出了数组的范围,一般来说,显示(即直接用常数当下标)调用不太容易出这样的错,但隐式(即用变量表示下标)调用就经常出错了,还有一种情况,是程序中定义的数组的长度是通过某些特定方法决定的,不是事先声明的,这个时候,最好先查看一下数组的length,以免出现这个异常。

8. java.lang.IllegalArgumentException 这个异常的解释是"方法的参数错误",比如g.setColor(int red,int green,int blue)这个方法中的三个值,如果有超过255的也会出现这个异常,因此一旦发现这个异常,我们要做的,就是赶紧去检查一下方法调用中的参数传递是不是出现了错误。

9. java.lang.IllegalAccessException   这个异常的解释是"没有访问权限",当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常。对程序中用了Package的情况下要注意这个异常

10.安全异常:产生的原因是由于当前的设备不支持当前程序,这个是由于机型产生的问题,我们应该换一个设备进行测试,检测当前程序存在什么样的异常;另一种原因是获取激活的网络信息实体类,需要添加权限,否则会出现此异常 解决办法:在配置文件中,添加android_permission_Access_NetWork_State的权限

11. RejectExcuteException:一个异步任务只能执行一次,否则会报异常 一个线程最多能执行5个线程,超出则等待,否则会报拒绝执行的异常 解决办法:使用子线程+handler来代替AsyncTask,或者一个线程中少添加几个异步操作。

12. Out of memory:内存溢出是存放的数据过多导致内存不足的溢出事件

13. Memory leak:内存泄露是本应该释放的资源没有充分得到释放,就继续添加数据导致内存泄露事件;

ArithmeticException(除数为0的异常),

BufferOverflowException(缓冲区上溢异常),

BufferUnderflowException(缓冲区下溢异常),

IndexOutOfBoundsException(出界异常),

NullPointerException(空指针异常),

EmptyStackException(空栈异常),

IllegalArgumentException,

NegativeArraySizeException,

NoSuchElementException,

SecurityException,

SystemException,

UndeclaredThrowableException(以上是不合法的参数异常)

asset和res的区别 res/raw和assets的相同点: 两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。 res/raw和assets的不同点:

1)res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即 R.raw.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。

2)res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹 3)读取文件资源举例: 读取res/raw下的文件资源,通过以下方式获取输入流来进行写操作 InputStream is = getResources().openRawResource(R.raw.filename); 读取assets下的文件资源,通过以下方式获取输入流来进行写操作 AssetManager am = null; am = getAssets(); InputStream is = am.open("filename");

Http和Https有什么区别 http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。http的连接很简单,是无状态的,... HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全。

 

.性能优化 UI方面:

1.减少多层嵌套(绘制流程)

2.ListView GridView 复用组件

3.ViewPager缓存page最好为3 并且每个pager显示的时候再去加载数据,减少预加 载,避免浪费。

4.图片显示慢 提高下载速度(InputStream再包一层缓冲流会更快(如BufferedInputStream))三级缓存 二次采样 用开源库 缓存方面:

  1.合理利用lrucache,disklrucache通过算法来平衡内存与硬盘缓存 2.网络+数据库 做增量加载 网络方面:

    1.使用合适的数据格式比如json

    2.多个请求合并成一个,尽量不做重定向

    3.合理的缓存,控制最大请求并发量,及时取消已失效的请求,过滤重复请求,timeout时间设置,请求优先级设置等。

代码规范:

  1.for loop中不要声明临时变量,不到万不得已不要在里面写try catch。

  2.避免频繁GC,内存泄漏,OOM(有机会专门说)

  3.合理使用数据类型,比如StringBuilder代替String,(笔试题最常见的是str+="str"中有几个对象) ,少用枚举enum,少用父类声明(List,Map)

  4.合理使用线程池,减少线程创建开销。

  5.使用单例

  6.多用常量,少用显式的"action_key",并维护一个常量类,别重复声明这些常量。

省电方面:

  1.合理使用service

  2.后台定时任务用Alarm代替Timer(例如心跳包)注意:小米手机五分钟以内Alarm无效

  3.减少网络使用 对数据进行压缩(上传文件)wifi与非wifi区别对待(下载大文件,看视频等)

  4.应用前台后台,屏幕熄灭点亮 区别对待

 

tcp和udp区别.

  TCP---(长链接)(管发管收,数据安全)传输控制协议,提供的是面向连接、可靠的字节流服务,传输数据前经过“三次握手”建立连接,保证数据传输的可靠性,但效率比较低。一般用于对于数据传输安全性较高的场合。

  UDP---(短连接,只管发,不管收,想聊天就是UDK,丢了几句聊天记录无所谓)用户数据报协议,是一个简单的面向数据报的运输层协议,面向无连接。UDP不提供可靠性,数据传输可能发生错序,丢包,但效率较高。一般用于对于实时性要求较高的场合。

 

同步 异步的区别:

  发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。

  当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。

转载博客请注明此博客地址
阅读更多
版权声明:转载请注明本文链接 https://blog.csdn.net/qq_31844349/article/details/80330224
文章标签: Android 异常
个人分类: Android
上一篇Android通过聚合数据API实现天气预报
下一篇Android广播(BroacastReceiver)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭