保留字:类名,方法名,变量名,只能是字母数字_,不能以数字开头
关键字:
基本数据类型:boolean,char,byte,short,int,long,float,double
Java中数据运算都是需要转换成int类型的,而且栈中是没有byte类型的
引用类型:所有类,接口,数组,枚举,标注
public static void arraycopy(Object src,int srcPos,Object dest,int destPos,length);
public static char[] arrayof(char[] original,int newLength);
复制指定数组,截取或用null字符填充,以使副本达到指定长度
original 要复制的数组
newLength 要返回的副本的长度
String的两种实例化方式
1.通过接收一个String类的对象,并重新实例化这个对象
新创建的字符串是该参数字符串的副本,也就是说 String str=new String('aaa'); str!='aaa';
2.采用直接赋值的方式进行对象的实例化
Constant Pool常量池
Java中在编译好的class文件中,有个区域称为Constant Pool,他是一个由数组组成的表,类型是cp_info constant_pool[]
用来存储程序中使用的各种常量,包括Class/String/Integer等各种基本Java数组类型
public String intern()
返回字符串对象的规范化表示形式。一个初始时为空的字符串池,它由类String私有保护地。
当调用intern方法时,如果池中已经包含,则返回池中的字符串,否则,将此String对象添加到池中,并且返回String的引用。
什么是框架:框架是一组程序的集合,包含了一系列的最佳实践,作用是解决某一领域的问题。
什么是三成架构:
表示层:负责处理与界面交互相关的功能
业务层:负责负责的业务逻辑计算和判断
持久层:负责将业务逻辑数据进行持久化的存储
Struct2是表示层的框架
Spring是业务层的框架
Hibernate是持久层的框架
接口:
接口是一种规范,一种规则。接口中定义的属性和方法的默认访问级别都是public,所以不能用private修饰,
所有的方法前默认有abstract。
抽象类和方法:
抽象方法必须在抽象类中,抽象类中不一定有抽象方法。
静态代码块不是一个方法,实际上只是一个static修饰符,后跟一个方法主体。静态代码块主要用于初始化,该代码块中的
代码仅被执行一次,即在构造函数执行前执行,而且只执行一次,如果继承的父类里有静态代码块,先执行父类的,但是子
类的静态代码块还是要先于父类的构造函数。如果一个类中存在多个静态代码块,那么其运行次序取决于类中的定义次序
非静态代码块不是一个方法,实际上只是一个方法主体。当创建类实例时,非静态代码块获得执行,其运行在父类构造器
之后,所在类构造器之前。如果一个类中存在多个非静态代码块,那么其运行顺序取决于在类中定义的次序。
重载:
方法的重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。
重载overloading是一个类中多态性的一种表现
Java的方法重载,就是在类中可以创建多个方法,他们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递
给他们的不同参数个数和参数类型来决定具体使用哪个方法,这是多态性。
重载的时候,方法名一样,但是参数类型和个数不一样,返回值类型可以相同也可以不同。无法以返回类型作为重载函数的
区分标准。
重写:
父类与子类之间的多态性,对父类的函数进行重新定义。
如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类
子类函数的访问修饰权限不能少于父类
switch(){}switch后面的小括号中的变量应该是byte,char,short,int中的一种,byte,char,short可以使用
是用为其可以被隐式的转换成int类型。
二分查找法,前提:数组中的元素要有序
public static int halfSearch_2(int[] arr,int key){
int min,max,mid;
min=0;
max=arr.length=1;
mid=(max+min)/2;
while(arr[mid]!=key){
if(key>arr[mid]){
min=min+1;
}elseif(key>arr[mid]){
max=mid-1;
}
if(max<min)
return -1;
mid=(min+max)/2;
}
return mid;
}
&和&&的区别:
都可以用做逻辑与的运算符,&&还具有短路的功能,&还可以用作位运算符。
使用fianl关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。
Math.round Math.float Math.ceil
ceil:向上取整
floor:向下取整
round:四舍五入
访问权限:
当前类 同一package 子孙类 其他package
public y y y y
protected y y y n
friendly y y n n
private y n n n
final:修饰类,方法,变量,类:不能在派生出子类。方法:方法不能被重写。变量:赋初值,且不能改变
fianlly:异常处理中使用,总是执行
finalize:析构方法,在垃圾回收器之前运行。
Anonymous Inner Class 匿名内部类是没有名字的内部类,不能继承其他类,可以作为一个接口,有另外一个
内部类实现。
HashMap:实现Map接口,没有分类或排序。它允许一个Null键和多个Null值
Hashtale:类似于HashMap,但是不允许Null键和Null值,他比HashMap慢,因为他是同步的
Collections是java.util下的类,包含各种关于集合操作的静态方法
Collection是java.util下的接口,他是各种集合的父接口
sleep()方式是使线程停止一段时间的方法。在sleep时间间隔期满后,线程不一定立即回复执行。这是因为在那个时刻,
其他线程可能正在运行而且没有被调度为放弃执行,除非醒来的线程具有更高的优先级。
wait()是线程交互时,如果线程对一个同步对象x发出一个wait调用,该线程会暂停执行,被调对象进入等待状态,直到
被唤醒或等待时间到。
error表示恢复不是不可能,但是很困难,不能能指望程序能处理这样的情况
exception表示一种设计或实现问题,它表示如果程序运行正常,从不会发生的情况
抽象类可以实现接口,抽象类是可继承实体类,但前提是实体类必须有明确的构造方法
启动一个线程是调用start方法,但并不意味着会立即执行。run方法可以产生必须退出的标志来停止一个线程
构造器不能被继承,因此不能被重写,但可以重载。
ArrayList是线程不安全的,不是同步的,数组增长是原来的一半。
Vector是同步的,线程安全的,数组增长是原来的一倍。
Collection
List
LinkedList
ArrayList
Vector
stack
Set-hashset-Linkedhashset
Treeset
Map
treemap
HashTable
HashMap-WeakHashMap
LinkedhashMap
request 用户端请求,此请求会包含来自get/post请求的参数
response 网页传回用户端的回应
pageContext网页的属性是在这里管理
session与请求有关的会话期
application servlet正在执行的内容
out用来传送回应的输出
config servlet的构架部件
page JSP网页本身
exception 针对错误网页,胃捕获的例外。
jsp:include 在页面被请求的时候引入一个文件
jsp:useBean 寻找或者实例化一个javaBean
jsp:setProperty 设置JavaBean的属性
jsp:getProperty 输出某个JavaBean的属性
jsp:forward 把请求赚到一个新的页面
jsp:plugin:根据浏览器类型为Java插件生成的Object或Embed标记
DOM:处理大型文件时性能下降非常厉害,DOM必须在解析文档之前把整个文件装入内存
SAX:是事件驱动型的,它顺序读取XML文件,不需要一次全部装载整个文件。
STAX:streaming API for XML
字节流:继承于InputStream OutputStream
字符流:继承于InputStreamReader OutputStreamWriter
2<<3 按位运算,左移三位,左移相当于乘于2的n次方
int 默认值为0 Integer默认值是Null。Null值与0是不同的
super.clone()克隆父类中的成员。
Java中实现多态的机制是:靠的是父类与接口定义的引用可以指向子类或具体实现类的实例对象
而程序调用的方法在运行期才动态绑定,就是引用变量所值的具体类的实例变量。
abstract的method是不可以是static的,也不可以是native的,native表示要用另外一种依赖、
平台的编程语言实现。synchronized同步所用的同步所对象是this.
String s=a+b+c+d;创建一个String对象,因为+在编译器进行编译时进行了优化。
运行时异常:是在程序运行时可能遇到的异常,是一种常见的运行错误。Java编译器要求抛出非运行时异常。
内存泄露:是指一个不再被程序使用的对象或变量一直被占据在内存中。
Android dvm的进程和Linux的进行,应用程序的进程是否为同一个概念?
DVM指dalivk的虚拟机。每一个Android应用程序都在它自己的进程中运行,都拥有一个
独立的Dalivk虚拟机实例。二每一个DVM都是Linux的一个进程,所以可以认为是同一概念。
sim卡的文件系统都有自己的规范,主要是为了和世纪通讯,sim本身可以有自己的操作系统,ef
就是做存储并和手机通讯用的。
嵌入式操作系统内存管理有:页式,段式,断页,用到了MMU,虚拟空间等技术。
嵌入式实时操作系统是指当外界事件和数据产生时,能够接受并以足够快的速度予以处理,其处理的
结果又能在规定的时间内控制生产过程或对处理系统做出快速响应,并控制所有实时任务协调一致运行的嵌入式操作
系统。主要用于工业控制,军事设备,航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用
实时系统。又分为软实时和硬实时,而安卓是基于Linux内核的,因此属于软实时。
一条短信 中文70,包含标点,英文160,160个字节。
安卓中的动画:分为两种,一种是Tween动画,还有一种是Frame动画。Tween动画,这种实现方式可以使
视图组件移动,放大,缩小以及产生透明度的变化,另一种是Frame动画,传统的动画方法,通过顺序的
播放排列好的图片来实现,类似电影。
handler机制的原理:
android提供了Handler和looper来满足线程间的通信。handler先进先出原则。looper类用来管理特定线程内
对象之间的消息交换。
looper:一个线程可以产生一个looper对象,由它来管理此线程里的message queue
handler:你可以构造handler对象来与looper沟通,以便push新消息到messagequeue里,或接收looper从
message queue选出所送来的消息。
message queue:用来存放线程放入的消息。
线程:UI Thread通常是main thread,而android启动线程时会替她建立一个message queue。
onCreate:在这里创建界面,做一些数据的初始化工作
onStart:到这一步变成用户可见不可交互的
onResume:变成和用户可交互的,在Activity栈系统通过栈的方式管理这些个Activity的最上边,运行完,
弹出栈,返回到上一个Activity
onPause:到这一步是可见但不可交互的,系统会停止动画等消耗CPU的事情,从上文的描述已经知道,
应该在这里保存你的一些数据,因为这个时候,你的程序的优先级降低,有可能被系统收回。在这里保存的数据,
应该在onResume里读出来。
onStop:变得不可见,被下一个Activity覆盖了
onDestory:这是Activity被干掉前最后一个被调用方法了,可能是外面类调用finish方法或者是系统为了节省空间
将他暂时性的干掉,可以用isFinishing()来判断它,如果你有一个progress dialog在线程中转动,请在onDestory
里把他cancel掉,不然等线程结束的时候,调用dialog的cancel方法会抛出异常的
android:theme=@android:style/Theme.Dialog
android:theme=@adnroid:style/Theme.Translucent 变成半透明
public void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
outState.putLog('id',123);
}
savedInstanceState是一个Bundle对象,可以理解为一个Map对象。
Intent intent=new Intent();
intent.setAction(Intent.Action_CALL);
intent.setData(Uri.parse('tel:'+number));
startActivity(intent);
服务:
使用startService()方法启用服务,调用者与服务之间没有关联,即使调用者退出,服务仍然运行
使用bindService()方法启用服务,调用者与服务绑定在一起,调用者一旦退出,服务也就终止。
采用Context.startService方法启动服务,在服务未被创建时,系统会先调用服务的oncreate方法
接着调用onStart方法,如果调用startService方法前服务已经被创建,多次调用startService方法
并不会导致多次创建服务,但会导致多次调用onStart方法,只能调用Context.stopService方法结束服务
服务结束时会调用onDestory方法
如何打开res aw目录中的数据库文件:
在android中不能直接打开res aw目录中的数据库文件,而需要在程序第一次启动时将该文件复制到
手机内存或sd卡的某个目录中,然后再打开该数据库文件。复制的基本方法是使用getResources().openRawRescource
方法获得res as目录中资源的inputstream对象,然后将该inputstream对象中的数据写入其他的目录中
相应文件中。在android SDK中可以使用SQLiteDatabase.openOrCreateDatabase方法打开任意目录中
的SQLite数据库文件。
Activity:是android程序与用户交互的窗口,是android构造块中最基本的一种,他需要为保持个界面的状态
做很多持久化的事情,妥善管理生命周期以及一些跳转逻辑
service:后台服务于Activity,封装有一个完整的功能逻辑实现,接收上层指令,完成相关的事务,定义好需要接收
的intent提供同步和异步的接口。
content provider:是android提供的第三方应用数据的访问方案,可以派成content provider类,对外提供数据,
可以像数据库一样进行排序,屏蔽内部数据的存储细节,向外提供统一的接口模型,大大简化上层的应用,
对数据的整合提供了更方便的途径。
broadcast receiver:接受一种或者多种intent做触发事件,接受相关消息,做一些简单的处理,转换成一条
notification,统一了android的事件广播模型。
framelayout linearlayout absolutelayout relativelayout tablelayout
tween 移动 放大 缩小以及产生透明度的变化
Frame 通过顺序的播放排列好的图片
ListView的优化方案:
如果自定义适配器,那么在getView方法中考录方法传进来的参数contentView是否为Null,如果是Null就
创建contentview并返回,如果不为Null,则直接使用。这个方法中尽可能少创建view
给contentview设置tag,传入一个viewHolder对象,用于缓存要显示的数据,可以达到图形数据异步加载的效果
如果listview需要显示的item很多,就要考虑分页加载
SharedPreferences,文件存储,SQLite数据库,ContentProvider,网络
standard singletop singletask singleinstantce
flag_activity_new_task flag_activity_clear_top flag_activity_reset_task_if_needed flag_activity_single_top
activity在屏幕旋转时的生命周期:
不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏会执行一次,竖屏会
执行两次。设置Activity的android:configChanges=orientation时,切屏还是会重新调用各个生命周期,
横屏和竖屏时只会执行一次,设置Activity的android:configChanges=orientation|keyboardHidden时,切屏
不会重新调用各个生命周期,只会执行onConfigurationChanged方法。
android 系统架构:
从下往上为linux内核层,运行库,应用程序框架层,应用程序层。
android提供了ContentResolver,外界的程序可以通过ContentResolver接口访问ContentProvider提供的数据
对于多个Activity:
记录打开的Activity。 发送特定广播:在需要结束应用时,发送一个特定的广播,每个Activity接收到
广播后,关闭即可。 递归退出:在打开新的Activity时使用startAcrivityForResult,然后自己加标志,
在onActivityResult中处理,递归关闭。
AIDL:android interface define language,接口描述语言,编译器可以通过aidl文件生成一段代码,
通过预定义的接口达到两个进程内部通信进程的目的。
运行时权限是由Dalvik(android授权)
文件系统是linux内核授权
通过直接发送Uri把参数带过去,或者通过mainifest里的intentfilter里的data属性。
sim卡的文件系统有自己规范,主要是为了和手机通信,sim本身可以有自己的操作系统,EF就是做
存储并和手机通信用的
嵌入式操作系统内存管理种类:页式,段式,断页,用到了MMU,虚拟空间等技术
嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的
结果又能在规定的时间内来控制生产过程或处理系统做出快速响应,并控制所有实时任务协调一致运行的
嵌入式操作系统。
一条最长的短信中文约占70个byte,英文160byte
DDMS是一个程序执行查看器,在里面可以看见线程和堆栈等信息。
TraceView是程序性能分析器。
android的IPC(进程通信机制):
IPC是内部进程通信的简称,是共享命名管道的资源。android中的IPC机制是为了让Activity和
service之间可以随时的进行交互,故在android中该机制,只适合Activity之间的通信,类似于远程
NDK是一系列工具的集合,NDK提供了一系列的工具,帮助开发者迅速的开发c/c++动态库,并能自动将
so和Java应用达成apk包。NDK集成了交叉编译器,并提供了相应的mk文件和隔离CPU、平台等的差异,
开发人员只需要简单的修改mk文件就可以创建出so。
intent的作用:可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带。
GLSurFaceView特性:管理一个surface,这个surface就是一块特殊的内存,能直接排版到android的试图
view上,管理一个EGL display,他能让opengl把内容渲染到上述的surface上。让渲染器在独立的线程
里运作,和UI线程分离。
ContentValues:他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的名
是String类型,而值都是基本类型。
android中assets目录的作用是:主要放置多媒体等数据文件
res/aw目录:原封不动的存储到设备上不会转换为二进制文件。
android中,jni的调用过程:
安装和下载Cygwin,下载android NDK。
在ndk项目中jni接口的设计
使用c/c++实现贝蒂方法
jni生成动态链接库.so文件
将动态链接库复制到Java工程,在Java工程中调用,运行Java工程即可。
如果后天的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态:
onSaveInstanceState()
ContentProvider是如何实现数据共享的:
创建一个属于自己的Content Provider或者将你的数据添加到一个已经存在的Content provider,前提是由
相同数据类型并且有写入Content provider的权限。
关键字:
基本数据类型:boolean,char,byte,short,int,long,float,double
Java中数据运算都是需要转换成int类型的,而且栈中是没有byte类型的
引用类型:所有类,接口,数组,枚举,标注
public static void arraycopy(Object src,int srcPos,Object dest,int destPos,length);
public static char[] arrayof(char[] original,int newLength);
复制指定数组,截取或用null字符填充,以使副本达到指定长度
original 要复制的数组
newLength 要返回的副本的长度
String的两种实例化方式
1.通过接收一个String类的对象,并重新实例化这个对象
新创建的字符串是该参数字符串的副本,也就是说 String str=new String('aaa'); str!='aaa';
2.采用直接赋值的方式进行对象的实例化
Constant Pool常量池
Java中在编译好的class文件中,有个区域称为Constant Pool,他是一个由数组组成的表,类型是cp_info constant_pool[]
用来存储程序中使用的各种常量,包括Class/String/Integer等各种基本Java数组类型
public String intern()
返回字符串对象的规范化表示形式。一个初始时为空的字符串池,它由类String私有保护地。
当调用intern方法时,如果池中已经包含,则返回池中的字符串,否则,将此String对象添加到池中,并且返回String的引用。
什么是框架:框架是一组程序的集合,包含了一系列的最佳实践,作用是解决某一领域的问题。
什么是三成架构:
表示层:负责处理与界面交互相关的功能
业务层:负责负责的业务逻辑计算和判断
持久层:负责将业务逻辑数据进行持久化的存储
Struct2是表示层的框架
Spring是业务层的框架
Hibernate是持久层的框架
接口:
接口是一种规范,一种规则。接口中定义的属性和方法的默认访问级别都是public,所以不能用private修饰,
所有的方法前默认有abstract。
抽象类和方法:
抽象方法必须在抽象类中,抽象类中不一定有抽象方法。
静态代码块不是一个方法,实际上只是一个static修饰符,后跟一个方法主体。静态代码块主要用于初始化,该代码块中的
代码仅被执行一次,即在构造函数执行前执行,而且只执行一次,如果继承的父类里有静态代码块,先执行父类的,但是子
类的静态代码块还是要先于父类的构造函数。如果一个类中存在多个静态代码块,那么其运行次序取决于类中的定义次序
非静态代码块不是一个方法,实际上只是一个方法主体。当创建类实例时,非静态代码块获得执行,其运行在父类构造器
之后,所在类构造器之前。如果一个类中存在多个非静态代码块,那么其运行顺序取决于在类中定义的次序。
重载:
方法的重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。
重载overloading是一个类中多态性的一种表现
Java的方法重载,就是在类中可以创建多个方法,他们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递
给他们的不同参数个数和参数类型来决定具体使用哪个方法,这是多态性。
重载的时候,方法名一样,但是参数类型和个数不一样,返回值类型可以相同也可以不同。无法以返回类型作为重载函数的
区分标准。
重写:
父类与子类之间的多态性,对父类的函数进行重新定义。
如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类
子类函数的访问修饰权限不能少于父类
switch(){}switch后面的小括号中的变量应该是byte,char,short,int中的一种,byte,char,short可以使用
是用为其可以被隐式的转换成int类型。
二分查找法,前提:数组中的元素要有序
public static int halfSearch_2(int[] arr,int key){
int min,max,mid;
min=0;
max=arr.length=1;
mid=(max+min)/2;
while(arr[mid]!=key){
if(key>arr[mid]){
min=min+1;
}elseif(key>arr[mid]){
max=mid-1;
}
if(max<min)
return -1;
mid=(min+max)/2;
}
return mid;
}
&和&&的区别:
都可以用做逻辑与的运算符,&&还具有短路的功能,&还可以用作位运算符。
使用fianl关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。
Math.round Math.float Math.ceil
ceil:向上取整
floor:向下取整
round:四舍五入
访问权限:
当前类 同一package 子孙类 其他package
public y y y y
protected y y y n
friendly y y n n
private y n n n
final:修饰类,方法,变量,类:不能在派生出子类。方法:方法不能被重写。变量:赋初值,且不能改变
fianlly:异常处理中使用,总是执行
finalize:析构方法,在垃圾回收器之前运行。
Anonymous Inner Class 匿名内部类是没有名字的内部类,不能继承其他类,可以作为一个接口,有另外一个
内部类实现。
HashMap:实现Map接口,没有分类或排序。它允许一个Null键和多个Null值
Hashtale:类似于HashMap,但是不允许Null键和Null值,他比HashMap慢,因为他是同步的
Collections是java.util下的类,包含各种关于集合操作的静态方法
Collection是java.util下的接口,他是各种集合的父接口
sleep()方式是使线程停止一段时间的方法。在sleep时间间隔期满后,线程不一定立即回复执行。这是因为在那个时刻,
其他线程可能正在运行而且没有被调度为放弃执行,除非醒来的线程具有更高的优先级。
wait()是线程交互时,如果线程对一个同步对象x发出一个wait调用,该线程会暂停执行,被调对象进入等待状态,直到
被唤醒或等待时间到。
error表示恢复不是不可能,但是很困难,不能能指望程序能处理这样的情况
exception表示一种设计或实现问题,它表示如果程序运行正常,从不会发生的情况
抽象类可以实现接口,抽象类是可继承实体类,但前提是实体类必须有明确的构造方法
启动一个线程是调用start方法,但并不意味着会立即执行。run方法可以产生必须退出的标志来停止一个线程
构造器不能被继承,因此不能被重写,但可以重载。
ArrayList是线程不安全的,不是同步的,数组增长是原来的一半。
Vector是同步的,线程安全的,数组增长是原来的一倍。
Collection
List
LinkedList
ArrayList
Vector
stack
Set-hashset-Linkedhashset
Treeset
Map
treemap
HashTable
HashMap-WeakHashMap
LinkedhashMap
request 用户端请求,此请求会包含来自get/post请求的参数
response 网页传回用户端的回应
pageContext网页的属性是在这里管理
session与请求有关的会话期
application servlet正在执行的内容
out用来传送回应的输出
config servlet的构架部件
page JSP网页本身
exception 针对错误网页,胃捕获的例外。
jsp:include 在页面被请求的时候引入一个文件
jsp:useBean 寻找或者实例化一个javaBean
jsp:setProperty 设置JavaBean的属性
jsp:getProperty 输出某个JavaBean的属性
jsp:forward 把请求赚到一个新的页面
jsp:plugin:根据浏览器类型为Java插件生成的Object或Embed标记
DOM:处理大型文件时性能下降非常厉害,DOM必须在解析文档之前把整个文件装入内存
SAX:是事件驱动型的,它顺序读取XML文件,不需要一次全部装载整个文件。
STAX:streaming API for XML
字节流:继承于InputStream OutputStream
字符流:继承于InputStreamReader OutputStreamWriter
2<<3 按位运算,左移三位,左移相当于乘于2的n次方
int 默认值为0 Integer默认值是Null。Null值与0是不同的
super.clone()克隆父类中的成员。
Java中实现多态的机制是:靠的是父类与接口定义的引用可以指向子类或具体实现类的实例对象
而程序调用的方法在运行期才动态绑定,就是引用变量所值的具体类的实例变量。
abstract的method是不可以是static的,也不可以是native的,native表示要用另外一种依赖、
平台的编程语言实现。synchronized同步所用的同步所对象是this.
String s=a+b+c+d;创建一个String对象,因为+在编译器进行编译时进行了优化。
运行时异常:是在程序运行时可能遇到的异常,是一种常见的运行错误。Java编译器要求抛出非运行时异常。
内存泄露:是指一个不再被程序使用的对象或变量一直被占据在内存中。
Android dvm的进程和Linux的进行,应用程序的进程是否为同一个概念?
DVM指dalivk的虚拟机。每一个Android应用程序都在它自己的进程中运行,都拥有一个
独立的Dalivk虚拟机实例。二每一个DVM都是Linux的一个进程,所以可以认为是同一概念。
sim卡的文件系统都有自己的规范,主要是为了和世纪通讯,sim本身可以有自己的操作系统,ef
就是做存储并和手机通讯用的。
嵌入式操作系统内存管理有:页式,段式,断页,用到了MMU,虚拟空间等技术。
嵌入式实时操作系统是指当外界事件和数据产生时,能够接受并以足够快的速度予以处理,其处理的
结果又能在规定的时间内控制生产过程或对处理系统做出快速响应,并控制所有实时任务协调一致运行的嵌入式操作
系统。主要用于工业控制,军事设备,航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用
实时系统。又分为软实时和硬实时,而安卓是基于Linux内核的,因此属于软实时。
一条短信 中文70,包含标点,英文160,160个字节。
安卓中的动画:分为两种,一种是Tween动画,还有一种是Frame动画。Tween动画,这种实现方式可以使
视图组件移动,放大,缩小以及产生透明度的变化,另一种是Frame动画,传统的动画方法,通过顺序的
播放排列好的图片来实现,类似电影。
handler机制的原理:
android提供了Handler和looper来满足线程间的通信。handler先进先出原则。looper类用来管理特定线程内
对象之间的消息交换。
looper:一个线程可以产生一个looper对象,由它来管理此线程里的message queue
handler:你可以构造handler对象来与looper沟通,以便push新消息到messagequeue里,或接收looper从
message queue选出所送来的消息。
message queue:用来存放线程放入的消息。
线程:UI Thread通常是main thread,而android启动线程时会替她建立一个message queue。
onCreate:在这里创建界面,做一些数据的初始化工作
onStart:到这一步变成用户可见不可交互的
onResume:变成和用户可交互的,在Activity栈系统通过栈的方式管理这些个Activity的最上边,运行完,
弹出栈,返回到上一个Activity
onPause:到这一步是可见但不可交互的,系统会停止动画等消耗CPU的事情,从上文的描述已经知道,
应该在这里保存你的一些数据,因为这个时候,你的程序的优先级降低,有可能被系统收回。在这里保存的数据,
应该在onResume里读出来。
onStop:变得不可见,被下一个Activity覆盖了
onDestory:这是Activity被干掉前最后一个被调用方法了,可能是外面类调用finish方法或者是系统为了节省空间
将他暂时性的干掉,可以用isFinishing()来判断它,如果你有一个progress dialog在线程中转动,请在onDestory
里把他cancel掉,不然等线程结束的时候,调用dialog的cancel方法会抛出异常的
android:theme=@android:style/Theme.Dialog
android:theme=@adnroid:style/Theme.Translucent 变成半透明
public void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
outState.putLog('id',123);
}
savedInstanceState是一个Bundle对象,可以理解为一个Map对象。
Intent intent=new Intent();
intent.setAction(Intent.Action_CALL);
intent.setData(Uri.parse('tel:'+number));
startActivity(intent);
服务:
使用startService()方法启用服务,调用者与服务之间没有关联,即使调用者退出,服务仍然运行
使用bindService()方法启用服务,调用者与服务绑定在一起,调用者一旦退出,服务也就终止。
采用Context.startService方法启动服务,在服务未被创建时,系统会先调用服务的oncreate方法
接着调用onStart方法,如果调用startService方法前服务已经被创建,多次调用startService方法
并不会导致多次创建服务,但会导致多次调用onStart方法,只能调用Context.stopService方法结束服务
服务结束时会调用onDestory方法
如何打开res aw目录中的数据库文件:
在android中不能直接打开res aw目录中的数据库文件,而需要在程序第一次启动时将该文件复制到
手机内存或sd卡的某个目录中,然后再打开该数据库文件。复制的基本方法是使用getResources().openRawRescource
方法获得res as目录中资源的inputstream对象,然后将该inputstream对象中的数据写入其他的目录中
相应文件中。在android SDK中可以使用SQLiteDatabase.openOrCreateDatabase方法打开任意目录中
的SQLite数据库文件。
Activity:是android程序与用户交互的窗口,是android构造块中最基本的一种,他需要为保持个界面的状态
做很多持久化的事情,妥善管理生命周期以及一些跳转逻辑
service:后台服务于Activity,封装有一个完整的功能逻辑实现,接收上层指令,完成相关的事务,定义好需要接收
的intent提供同步和异步的接口。
content provider:是android提供的第三方应用数据的访问方案,可以派成content provider类,对外提供数据,
可以像数据库一样进行排序,屏蔽内部数据的存储细节,向外提供统一的接口模型,大大简化上层的应用,
对数据的整合提供了更方便的途径。
broadcast receiver:接受一种或者多种intent做触发事件,接受相关消息,做一些简单的处理,转换成一条
notification,统一了android的事件广播模型。
framelayout linearlayout absolutelayout relativelayout tablelayout
tween 移动 放大 缩小以及产生透明度的变化
Frame 通过顺序的播放排列好的图片
ListView的优化方案:
如果自定义适配器,那么在getView方法中考录方法传进来的参数contentView是否为Null,如果是Null就
创建contentview并返回,如果不为Null,则直接使用。这个方法中尽可能少创建view
给contentview设置tag,传入一个viewHolder对象,用于缓存要显示的数据,可以达到图形数据异步加载的效果
如果listview需要显示的item很多,就要考虑分页加载
SharedPreferences,文件存储,SQLite数据库,ContentProvider,网络
standard singletop singletask singleinstantce
flag_activity_new_task flag_activity_clear_top flag_activity_reset_task_if_needed flag_activity_single_top
activity在屏幕旋转时的生命周期:
不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏会执行一次,竖屏会
执行两次。设置Activity的android:configChanges=orientation时,切屏还是会重新调用各个生命周期,
横屏和竖屏时只会执行一次,设置Activity的android:configChanges=orientation|keyboardHidden时,切屏
不会重新调用各个生命周期,只会执行onConfigurationChanged方法。
android 系统架构:
从下往上为linux内核层,运行库,应用程序框架层,应用程序层。
android提供了ContentResolver,外界的程序可以通过ContentResolver接口访问ContentProvider提供的数据
对于多个Activity:
记录打开的Activity。 发送特定广播:在需要结束应用时,发送一个特定的广播,每个Activity接收到
广播后,关闭即可。 递归退出:在打开新的Activity时使用startAcrivityForResult,然后自己加标志,
在onActivityResult中处理,递归关闭。
AIDL:android interface define language,接口描述语言,编译器可以通过aidl文件生成一段代码,
通过预定义的接口达到两个进程内部通信进程的目的。
运行时权限是由Dalvik(android授权)
文件系统是linux内核授权
通过直接发送Uri把参数带过去,或者通过mainifest里的intentfilter里的data属性。
sim卡的文件系统有自己规范,主要是为了和手机通信,sim本身可以有自己的操作系统,EF就是做
存储并和手机通信用的
嵌入式操作系统内存管理种类:页式,段式,断页,用到了MMU,虚拟空间等技术
嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的
结果又能在规定的时间内来控制生产过程或处理系统做出快速响应,并控制所有实时任务协调一致运行的
嵌入式操作系统。
一条最长的短信中文约占70个byte,英文160byte
DDMS是一个程序执行查看器,在里面可以看见线程和堆栈等信息。
TraceView是程序性能分析器。
android的IPC(进程通信机制):
IPC是内部进程通信的简称,是共享命名管道的资源。android中的IPC机制是为了让Activity和
service之间可以随时的进行交互,故在android中该机制,只适合Activity之间的通信,类似于远程
NDK是一系列工具的集合,NDK提供了一系列的工具,帮助开发者迅速的开发c/c++动态库,并能自动将
so和Java应用达成apk包。NDK集成了交叉编译器,并提供了相应的mk文件和隔离CPU、平台等的差异,
开发人员只需要简单的修改mk文件就可以创建出so。
intent的作用:可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带。
GLSurFaceView特性:管理一个surface,这个surface就是一块特殊的内存,能直接排版到android的试图
view上,管理一个EGL display,他能让opengl把内容渲染到上述的surface上。让渲染器在独立的线程
里运作,和UI线程分离。
ContentValues:他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的名
是String类型,而值都是基本类型。
android中assets目录的作用是:主要放置多媒体等数据文件
res/aw目录:原封不动的存储到设备上不会转换为二进制文件。
android中,jni的调用过程:
安装和下载Cygwin,下载android NDK。
在ndk项目中jni接口的设计
使用c/c++实现贝蒂方法
jni生成动态链接库.so文件
将动态链接库复制到Java工程,在Java工程中调用,运行Java工程即可。
如果后天的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态:
onSaveInstanceState()
ContentProvider是如何实现数据共享的:
创建一个属于自己的Content Provider或者将你的数据添加到一个已经存在的Content provider,前提是由
相同数据类型并且有写入Content provider的权限。