android面试基础

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包的包体中。

你可能感兴趣的:(android)