android面试基础
来源:互联网 发布:smart 知乎 编辑:程序博客网 时间:2024/04/20 08:34
1.assets:不会在R.java文件下生成相应的标记,assets文件夹可以自己创建文件夹,必须使用
AssetsManager类进行访问,存放到这里的资源在运行打包的时候都会打入程序安装包中,
2.res:会在R.java文件下生成标记,这里的资源会在运行打包操作的时候判断哪些被使用到了,没有被
使用到的文件资源是不会打包到安装包中的。
res/raw和assets文件夹来存放不需要系统编译成二进制的文件,例如字体文件等
在res文件夹下还可以定义一下目录:
res/anim:这里存放的是动画资源。
res/xml:可以在Activity中使用getResource().getXML()读取这里的资源文件
res/raw:该目录下的文件可以直接复制到设备上,不能有子文件夹,编译软件时,这里的数据不需要编译
,直接加入到程序安装包中,使用方法是getResource().OpenRawResources(ID),其中参数ID的形式是
R.raw.XXX.
//改变适配器的数目
// adapter.getCount() += pageSize;
//通知适配器,发现改变操作
//要想刷新adapter,它的数据源data首地址必须不变,它的内容可变
adapter.notifyDataSetChanged();
public class viewAnimation extends Animation {
在绘制动画的过程中会反复的调用applyTransformation 函数,每次调用参数interpolatedTime值都会变
化,该参数从0渐变为1,当该参数为1时表明动画结束。通过参数Transformation 来获取变换的矩阵
(matrix)
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
// TODO Auto-generated method stub
super.applyTransformation(interpolatedTime, t);
final Matrix martix=t.getMatrix();
martix.setScale(interpolatedTime, interpolatedTime);
}
告诉Animation目标View的大小参数,在这里可以初始化一些相关的参数,例如设置动画持续时间、设置
Interpolator、设置动画的参考点等。
@Override
public void initialize(int width, int height, int parentWidth,
int parentHeight) {
// TODO Auto-generated method stub
//作为回调,他告诉了宽高尺寸
super.initialize(width, height, parentWidth, parentHeight);
setDuration(2500);
setFillAfter(true);
setInterpolator(new LinearInterpolator());
}
}
binder作用:IPC:执行另一个进程中的方法。访问远程对象。即一个进程能够访问到另一个进程的对象
。这种访问是同步的!
怎么做到?服务端将数据放到binder驱动的共享内存中,客户端根据handle去读取数据。
android 应用中的进程,线程模型:
1,当一个应用程序开始运行它的第一个组件时,Android会为它启动一个Linux进程,并在其中执行一个
单一的线程。默认情况下,应用程序所有的组件均在这个进程的这个线程中运行。
当然, 也可以使用android:process 属性来指定组件(包含activity,broadcast等)应当运行于哪个进
程之内。这些属性可以设置为使每个组件运行于它自己的进程之内,或一些组件共享一个进程而其余的组
件不这么做,例如android:process=system表示允许和系统进程在一个进程内,当这两个应用程序也共享
一个拥有相同签名的UserId,就允许相互访问对方数据
线程和服务:
有关进程等级,正在运行一个服务(service)的进程的等级比拥有后台activity的进程都高,所以启动一
个服务,而不是启动一个线程来做下载,播放音乐。使用一个service保证了改操作将至少拥有服务进程
的优先级,无论该activity发生了什么。这样当系统内存不足的时候,这个service就不会被kill掉。
进程组件何时被kill掉?一个拥有活跃的broadcast receiver的进程被保护不被kill。但是一个只有不
活跃的的component的进程可以在任何时候被系统kill掉,当其它进程需要内存时。
把activity context传递给view控件,意味着view拥有一个指向activity的引用,进而引用activity占有
的资源:
view hierachy, resource等。这样如果context发生内存泄露的话,就会泄露很多内存。这里泄露的意思
是gc没有办法回收
activity的内存。Leaking an entire activity是很容易的一件事。当屏幕旋转的时候,系统会销毁当前
的activity,保存
状态信息,再创建一个新的。比如我们写了一个应用程序,它需要加载一个很大的图片,我们不希望每次
旋转屏 幕的时候都销
毁这个图片,重新加载。实现这个要求的简单想法就是定义一个静态的Drawable,这样Activity 类创建
销毁它始终保存在内存中。但是这样会导致内存泄露。
activity中的任何对象的生命周期长过activity,避免由于对象对 activity的引用导致activity不能正
常被销毁。我们可以
使用application context。application context伴随application的一生,与activity的生命周期无关
。
hashmap 遍历:
第一种:
Map map = new HashMap();
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
Object key = entry.getKey();
Object val = entry.getValue();
}
效率高,以后一定要使用此种方式!
第二种:
Map map = new HashMap();
Iterator iter = map.keySet().iterator();
while (iter.hasNext()) {
Object key = iter.next();
Object val = map.get(key);
}
效率低,以后尽量少使用!
对象的引用分4种级别,从而更加灵活的控制对象的生命周期。4种级别由高到低依次为:强引用、软引用
、弱引用和虚引用。
⑴强引用(StrongReference)
强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,
Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解
决内存不足的问题。 ps:强引用其实也就是我们平时A a = new A()这个意思。
⑵软引用(SoftReference)
如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回
收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感
的高速缓存(下文给出示例)。
软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收器回收,
Java虚拟机就会把这个软引用加入到与之关联的引用队列中。
⑶弱引用(WeakReference)
弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管
辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内
存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。
弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回收,Java虚
拟机就会把这个弱引用加入到与之关联的引用队列中。
⑷虚引用(PhantomReference)
“虚引用”顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果
一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。
虚引用主要用来跟踪对象被垃圾回收器回收的活动。虚引用与软引用和弱引用的一个区别在于:虚引用必
须和引用队列 (ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引
用,就会在回收对象的内存之前,把这个虚引用加入到与之 关联的引用队列中。
ReferenceQueue queue = new ReferenceQueue ();
GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,
参数之间以&相连,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%
BD。URL不存在参数上限的问题,过GET提交数据,用户名和密码将明文出现在URL上,因此安全性没有
POST高 POST把提交的数据则放置在是HTTP包的包体中。
AssetsManager类进行访问,存放到这里的资源在运行打包的时候都会打入程序安装包中,
2.res:会在R.java文件下生成标记,这里的资源会在运行打包操作的时候判断哪些被使用到了,没有被
使用到的文件资源是不会打包到安装包中的。
res/raw和assets文件夹来存放不需要系统编译成二进制的文件,例如字体文件等
在res文件夹下还可以定义一下目录:
res/anim:这里存放的是动画资源。
res/xml:可以在Activity中使用getResource().getXML()读取这里的资源文件
res/raw:该目录下的文件可以直接复制到设备上,不能有子文件夹,编译软件时,这里的数据不需要编译
,直接加入到程序安装包中,使用方法是getResource().OpenRawResources(ID),其中参数ID的形式是
R.raw.XXX.
//改变适配器的数目
// adapter.getCount() += pageSize;
//通知适配器,发现改变操作
//要想刷新adapter,它的数据源data首地址必须不变,它的内容可变
adapter.notifyDataSetChanged();
public class viewAnimation extends Animation {
在绘制动画的过程中会反复的调用applyTransformation 函数,每次调用参数interpolatedTime值都会变
化,该参数从0渐变为1,当该参数为1时表明动画结束。通过参数Transformation 来获取变换的矩阵
(matrix)
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
// TODO Auto-generated method stub
super.applyTransformation(interpolatedTime, t);
final Matrix martix=t.getMatrix();
martix.setScale(interpolatedTime, interpolatedTime);
}
告诉Animation目标View的大小参数,在这里可以初始化一些相关的参数,例如设置动画持续时间、设置
Interpolator、设置动画的参考点等。
@Override
public void initialize(int width, int height, int parentWidth,
int parentHeight) {
// TODO Auto-generated method stub
//作为回调,他告诉了宽高尺寸
super.initialize(width, height, parentWidth, parentHeight);
setDuration(2500);
setFillAfter(true);
setInterpolator(new LinearInterpolator());
}
}
binder作用:IPC:执行另一个进程中的方法。访问远程对象。即一个进程能够访问到另一个进程的对象
。这种访问是同步的!
怎么做到?服务端将数据放到binder驱动的共享内存中,客户端根据handle去读取数据。
android 应用中的进程,线程模型:
1,当一个应用程序开始运行它的第一个组件时,Android会为它启动一个Linux进程,并在其中执行一个
单一的线程。默认情况下,应用程序所有的组件均在这个进程的这个线程中运行。
当然, 也可以使用android:process 属性来指定组件(包含activity,broadcast等)应当运行于哪个进
程之内。这些属性可以设置为使每个组件运行于它自己的进程之内,或一些组件共享一个进程而其余的组
件不这么做,例如android:process=system表示允许和系统进程在一个进程内,当这两个应用程序也共享
一个拥有相同签名的UserId,就允许相互访问对方数据
线程和服务:
有关进程等级,正在运行一个服务(service)的进程的等级比拥有后台activity的进程都高,所以启动一
个服务,而不是启动一个线程来做下载,播放音乐。使用一个service保证了改操作将至少拥有服务进程
的优先级,无论该activity发生了什么。这样当系统内存不足的时候,这个service就不会被kill掉。
进程组件何时被kill掉?一个拥有活跃的broadcast receiver的进程被保护不被kill。但是一个只有不
活跃的的component的进程可以在任何时候被系统kill掉,当其它进程需要内存时。
把activity context传递给view控件,意味着view拥有一个指向activity的引用,进而引用activity占有
的资源:
view hierachy, resource等。这样如果context发生内存泄露的话,就会泄露很多内存。这里泄露的意思
是gc没有办法回收
activity的内存。Leaking an entire activity是很容易的一件事。当屏幕旋转的时候,系统会销毁当前
的activity,保存
状态信息,再创建一个新的。比如我们写了一个应用程序,它需要加载一个很大的图片,我们不希望每次
旋转屏 幕的时候都销
毁这个图片,重新加载。实现这个要求的简单想法就是定义一个静态的Drawable,这样Activity 类创建
销毁它始终保存在内存中。但是这样会导致内存泄露。
activity中的任何对象的生命周期长过activity,避免由于对象对 activity的引用导致activity不能正
常被销毁。我们可以
使用application context。application context伴随application的一生,与activity的生命周期无关
。
hashmap 遍历:
第一种:
Map map = new HashMap();
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
Object key = entry.getKey();
Object val = entry.getValue();
}
效率高,以后一定要使用此种方式!
第二种:
Map map = new HashMap();
Iterator iter = map.keySet().iterator();
while (iter.hasNext()) {
Object key = iter.next();
Object val = map.get(key);
}
效率低,以后尽量少使用!
对象的引用分4种级别,从而更加灵活的控制对象的生命周期。4种级别由高到低依次为:强引用、软引用
、弱引用和虚引用。
⑴强引用(StrongReference)
强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,
Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解
决内存不足的问题。 ps:强引用其实也就是我们平时A a = new A()这个意思。
⑵软引用(SoftReference)
如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回
收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感
的高速缓存(下文给出示例)。
软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收器回收,
Java虚拟机就会把这个软引用加入到与之关联的引用队列中。
⑶弱引用(WeakReference)
弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管
辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内
存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。
弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回收,Java虚
拟机就会把这个弱引用加入到与之关联的引用队列中。
⑷虚引用(PhantomReference)
“虚引用”顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果
一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。
虚引用主要用来跟踪对象被垃圾回收器回收的活动。虚引用与软引用和弱引用的一个区别在于:虚引用必
须和引用队列 (ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引
用,就会在回收对象的内存之前,把这个虚引用加入到与之 关联的引用队列中。
ReferenceQueue queue = new ReferenceQueue ();
GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,
参数之间以&相连,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%
BD。URL不存在参数上限的问题,过GET提交数据,用户名和密码将明文出现在URL上,因此安全性没有
POST高 POST把提交的数据则放置在是HTTP包的包体中。
0 0
- Android面试基础
- android面试基础总结
- android面试基础总结
- android面试基础总结
- android面试基础总结
- android面试基础
- Android基础面试问题
- Android 面试 基础
- Android面试基础
- Android面试基础
- Android 面试基础
- 学习Android,面试基础
- Android面试基础题
- android基础面试
- android面试基础收集
- Android 面试基础
- android----面试基础概括总结
- Android程序员面试Java基础
- 浅析ASP.NET的身份验证
- 求Excel数据表每列的最大值、最小值以及分段
- Android 软键盘监听事件
- 【C++】变量(六) 常变量
- 初识stm32库
- android面试基础
- 网站日志是什么?
- struts2 处理请求流程分析(结合源码)
- c++基本常识
- vs2013 ADO连接SQL server2012数据库
- 什么才叫幸福的生活
- 如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)?
- Java写的登陆窗口
- 使用Random类生成随机数