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

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 行政拘留人跑了怎么办 车牌号被偷了怎么办 当员工提出辞职怎么办 老员工提出辞职怎么办 家人进看守所了怎么办 被贷款中介诈骗怎么办 喝完酒吐难受怎么办 犯罪嫌疑人死在看守所怎么办 犯罪嫌疑人死不承认怎么办 高血压进了看守所怎么办 看守所里被欺负怎么办 老师上课迟到了怎么办 艾滋病看守所不收怎么办 没能力偿还债务怎么办 监狱病人的癌症怎么办 监狱的传染病人怎么办 犯人在监狱重病怎么办 亲戚被关拘留所怎么办 打麻将被拘留怎么办 轻伤检察院不批捕怎么办 吸毒人被拘留怎么办 法院拘留没去怎么办 羁押期限超过了怎么办 羁押期限已满怎么办 刑事拘留22天了怎么办 被派出所拘留 车怎么办 被公安怀疑贩毒怎么办 报案后证据不足怎么办 担心丈夫复嫖怎么办 交通事故当事人重伤笔录怎么办 交通事故做完笔录后怎么办 罚款单子丢了怎么办 刑事案件人跑了怎么办 打架当事人跑了怎么办 赌博被派出所抓怎么办 治安案件人跑了怎么办 去警察局做笔录怎么办 未成年打架留下案底怎么办 土地被别人侵占怎么办 在公安局有案底怎么办 做小姐有案底怎么办