android 基础

1 android的任务栈是什么,是通过什么样的标签来管理的?

  • standard(标准):每次创建一个activity的时候,都会讲这个acitivity压入栈中,这种创建的activity就会执行一次完整的生命周期
  • singleTop(单个栈顶):创建新的任务之前会去搜索栈顶的元素是不是需要穿件的任务,如果YES:那么就直接调用当前栈顶的元素,如果No:这走类似standard模式
  • singlgeTag(单独模式):创建新的任务之前会搜索当前栈中是否有该元素,如果YES,那么会删除这个元素上面所有的元素,直到改元素位于栈顶。NO:类似standard模式
  • singleInstance(单例模式):创建一个新的任务站,将该任务放入其中,便于复用性

2 acitivity的状态缓存

  • activity在后台的时候是不可控的,所以不知道是否会销毁掉,如果销毁了之后可以通过onSaveInstanceState()方法进行保存状态操作

3 对fragment的理解

  • fragment顾名思义碎片的意思,它有它单独的生命周期。能够把之前集中在activity的布局操作集中到fragment中,并且集中处理。能够方面不同之间的屏幕适配,关键还有自身的一套管理规则
  • fragment和activity之间的通信,目前最常用的有三种方式
    1.通过获取宿主activity来获取fragment事物管理(fragmentTrancetionManager)来获取fragment通信.
    2.通过接口实现通信,宿主activity在中间做中转.
    3.通过广播的也可以。

4 Handler机制

  • Handler机制中涉及到有 MessageQuee,Looper。MessageQuee是以消息队列的形式存在。 在App 中存在一个UI线程,它绑定一个Looper的,这个looper其实已经处于一个死循环的过程中,只不过它会不停获取当前的一个Handler的句柄,如果没有进行一个等待。 当我们在acitivty中new出一个Handler的时候,这时候三方就已经关联上了,然后mHandler.postMessage(Message msg)。 这个时候主线中的Looper就会获取这个消息队列的handler了。
  • 如果是在子线程中 new出一个Handler,那么这个子线程则需要跟Looper向关联起来,那么需要调用Looper.prerear();,然后这个handler的句柄不管是在哪一个线程发送消息,都会在刚刚绑定的线程中接收消息。

5 ContentProvider的理解

  • 他能够实现跨应用之间数据共享,比如联系人,图库,音视频库等。
  • URI 访问数据源的关键地址
    contentprovider_uri.png

    A部分:固定头 B部分:包名确定唯一性 C部分:数据那个数据源的集合 D部分:指定唯一的数据
  • 实现ContentProvider官方给的api 相关的增删改查方法,其内部实现是sqlite数据的实现。然后同过urimatcher来匹配通过SQLiteQueryBuilder来访问。

6 Service 的理解

service类似activity的生命周期,后台处理一些相关东西,比如 音乐的播放,或者长连接实现等等...
service 的创建
service的第一次的创建会实现onCreate,onStartCommand方法,如果再次启动service,则会直接跳过onCreate方法 有两种启动方式 一种是直接启动 startService(intent),另一种是 bindService(intent,serviceConnection,BIND_AUTO_CREATE);
service和acitivity的通信方式
在service中有一个onBind(Intent i)方法,而在activity中 ServiceConnection 匿名类,能够向下转型,将它与service进行绑定。
将service 定义为一个新的进程
android:process=":remote" 这个时候将不能够直接与activity进行绑定了,如果要进行通信,这需要进程间的通信了,或者使用广播也是可以的
直接启动service,在onstartCommand的几种返回值
START_STICKY: 粘性的,如果service被kill掉,保留service状态,但不保留intent对象,系统将尝试重新启动service. START_NOT_STICKY:非粘性的 ....

7 android 动画的集中形式

3种动画形式

  • 逐帧动画: 将完整的动画拆分成一张一张的图片,然后连贯起来播放
  • 补间动画:对view进行一系列的动画操作,包括淡入淡出、缩放、平移、旋转四中
  • 属性动画:可以改变任意属性来完成动画效果,系统为我们提供了 valueAnimator,ObjectAnimator等相关api可供扩展。这个时候要里面的属性进行修改,所以需要实现TypeEvaluator

8 对ListView 的理解,以及优化

listView 中 有RecycleBin机制

9 对内存的泄露OOM的理解,已经出现相应措施

  • 一般造成OOM的原因是 Bitmap使用不当,线程管理处理泄露。
    当运行一个app的时候,虚拟机会动态分配我们一个内存,在当前的内存分配中是不能够超出的。可拿到一张高分辨率的图片后,通常会获取这个位图bitmap,它是以ARGB8888 4444 565这几种形式构成 ARGB8888 32位 4个字节。 如果是100100的分辨率大么位图bitmap = 1001004,那么这个时候我们要对图片进行压缩处理,这个时候用到的是InSimpleSize 他是采样率,一般以2的倍数递增,值越大 压缩率越高 如 inSimpelSize = 4 那么压缩结果将是 width1/4hight1*4.大小将是原来的 1/16.
    final BitmapFactory.Options options = new BitmapFactory.Options();//图片操作参数
    options.inJustDecodeBounds = true; //ture表示不压缩,false表示压缩
    BitmapFactory.decodeResource(res, resId, options);//根据资源获取位图
    inSampleSize options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);// 调用方法计算合适的

10 对sokent的理解

11 JNI的使用规则

12 设计一个图片的缓存加载机制

  • 图片的压缩
    图片的大小跟分辨率是成正比的,

13 view的分发机制

对MVC 和 MVP 模式的理解

你可能感兴趣的:(android 基础)