JDK,JRE,JVM,SDK,API,ADT,OOM,ANR

来源:互联网 发布:小学生学编程 编辑:程序博客网 时间:2024/05/16 13:51

目录:JDK,JRE,JVM,SDK,API,ADT,OOM,ANR


JDK:

全称:Java Development Kit

中文:Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。


JRE:

全称:Java running environment

中文:java运行环境


jvm

全称:Java Virtual Machine

中文:java的虚拟机


区别和联系:

JDK就是java的开发工具集,顾名思义就是你做开发用的,其中包括javac,也就是java compiler等,你所写的java程序在经过javac编译后会形成字符行文件,这个是java的中间文件,计算机是看不懂的,而这个文件是给jvm(java的虚拟机)用的,由jvm进行解释后形成机器语言给计算机。而这个jvm就在jre中,也就是说java程序的运行要有jre来担当。

所以jdk和jre的区别就是一个用于开发,一个用于运行,联系就是他们都是java开发者所必备的(除非你就像运行java程序,那么用jre就足够了)。


SDK

英文:Software Development Kit

中文:软件开发工具包


API

英文:Application Programming Interface,

中文:应用编程接口

是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

ADT

     英文:Android Development Tools
     中文:安卓开发工具
区别:
SDK就是Kit,工具箱嘛,IOS平台上就是XCode,一系列的工具组合在一起,比如你在编辑器里敲代码的时候它会自动补全代码,自动错误检查,你点一下Run,它会调用编译器来自动编译,编译完它会调用iPhone的模拟器来运行,这就是SDK,提供整套的开发工具供开发者使用。
API就是网站提供的接口,比如你想开发一个电商的手机客户端,你从哪里读取数据写入数据呢?总不能从Web版里调用吧?那里是一堆一堆的html代码啊,所以API就是网站提供的接口,供开发者接入用的。




 

OOM

Out of Memory,内存溢出


Out Of Memory,一般是由于程序编写者对内存使用不当,如对该释放的内存资源没有释放,导致其一直不能被再次使用而使计算机内存被耗尽的现象。重启计算机即可,但根本解决办法还是对代码进行优化。

出现的原因:比如操作中有死循环,或者快速滑动加载很多图片(图片过多过大),或者其他导致内存快速大量消耗而来不及回收使用。

总结为:一、加载对象过大;    二、相应资源过多,没有来不及释放。

  解决这样的问题,也有一下几个方面:

一:在内存引用上做些处理,常用的有软引用、强化引用、弱引用

二:在内存中加载图片时直接在内存中做处理,如:边界压缩.

  三:动态回收内存

四:优化Dalvik虚拟机的堆内存分配

五:自定义堆内存大小


在内存中加载图片时直接在内存中做处理,如:边界压缩.

(1):要求服务器端限制图片大小,处理成适合移动端的图片,比如宽度<400像素,用户头像<100像素

(2):终端代码自己缩放:


inSampleSize=4:表示按照url请求的图片的1/16显示,即宽高都缩放成1/4;

inJustDecodeBounds=true:表示只按照url去请求图片的边框,知道它的宽高,这样就方便自己合理的缩放。算出缩放比例size之后,再按照size去请求图片(请求之前必须加代码inJustDecodeBounds=false,不然还是请求边框)。



ANR 

- Application Not Responding ,程序不响应

在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。所以一个流畅的合理的应用程序中不能出现anr,而让用户每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样系统不会显示ANR给用户。默认情况下,在android中Activity的最长执行时间是5秒,BroadcastReceiver的最长执行时间则是10秒。(不同手机不同android版本时间可能不一样,不是固定的5秒)

出现的原因在主线程做了耗时工作,

Android应用程序通常是运行在一个单独的线程(例如,main)里。这意味着你的应用程序所做的事情如果在主线程里占用了太长的时间的话,就会引发ANR对话框,因为你的应用程序并没有给自己机会来处理输入事件或者Intent广播。

因此,运行在主线程里的任何方法都尽可能少做事情。特别是,Activity应该在它的关键生命周期方法(如onCreate()和onResume())里尽可能少的去做创建操作。潜在的耗时操作,例如网络或数据库操作,

 解决办法:开子线程做耗时工作

不是说你的主线程阻塞在那里等待子线程的完成--也不是调用Thread.wait()或是Thread.sleep()。替代的方法是,主线程应该为子线程提供一个Handler,以便完成时能够提交给主线程,主线程在做相应的操作。

一般来说,在应用程序里,100到200ms是用户能感知阻滞的时间阈值。因此,这里有一些额外的技巧来避免ANR,并有助于让你的应用程序看起来有响应性。

如果你的应用程序为响应用户输入,正在后台工作的话,可以显示工作的进度(ProgressBar和ProgressDialog对这种情况来说很有用)。

如果你的应用程序有一个耗时的初始化过程的话,考虑可以显示一个Splash Screen或者快速显示主画面并异步来填充这些信息。在这两种情况下,你都应该显示正在进行的进度,以免用户认为应用程序被冻结了。

0 0
原创粉丝点击