2016年2月份面试题

1. OkHttp原生取消网络请求的方法:

Call.Cancel();

2. android事件分发机制:

 3.0  以Button为例:

onTouch是优先于onClick执行的,并且onTouch执行了两次,一次是ACTION_DOWN,一次是ACTION_UP(你还可能会有多次ACTION_MOVE的执行,如果你手抖了一下)。因此事件传递的顺序是先经过onTouch,再传递到onClick方法中。

3.1. onTouch和onTouchEvent有什么区别,又该如何使用?

从源码中可以看出,这两个方法都是在View的dispatchTouchEvent中调用的,onTouch优先于onTouchEvent执行。如果在onTouch方法中通过返回true将事件消费掉,onTouchEvent将不会再执行。

另外需要注意的是,onTouch能够得到执行需要两个前提条件,第一mOnTouchListener的值不能为空,第二当前点击的控件必须是enable的。因此如果你有一个控件是非enable的,那么给它注册onTouch事件将永远得不到执行。对于这一类控件,如果我们想要监听它的touch事件,就必须通过在该控件中重写onTouchEvent方法来实现。

  1. 为什么给ListView引入了一个滑动菜单的功能,ListView就不能滚动了?

如果你阅读了Android实现图片滚动控件,含页签功能,让你的应用像淘宝一样炫起来 这篇文章。当时我在图片轮播器里使用Button,主要就是因为Button是可点击的,而ImageView是不可点击的。如果想要使用ImageView,可以有两种改法。第一,在ImageView的onTouch方法里返回true,这样可以保证ACTION_DOWN之后的其它action都能得到执行,才能实现图片滚动的效果。第二,在布局文件里面给ImageView增加一个android:clickable=”true”的属性,这样ImageView变成可点击的之后,即使在onTouch里返回了false,ACTION_DOWN之后的其它action也是可以得到执行的。

3 ViewGroup

顾名思义,ViewGroup就是一组View的集合,它包含很多的子View和子VewGroup,是Android中所有布局的父类或间接父类,像LinearLayout、RelativeLayout等都是继承自ViewGroup的。但ViewGroup实际上也是一个View,只不过比起View,它多了可以包含子View和定义布局参数的功能。

4 android 动画:

  1. 帧动画:这类动画可以创建一个Drawable系列,按照一定的时间间歇来显示图片
  2. 补间动画:动画缩放,旋转,移动,伸展,淡出等

    1、Alpha:淡入淡出效果
      2、Scale:缩放效果
      3、Rotate:旋转效果
      4、Translate:移动效果

  3. 属性动画

5 activity的四种启动模式

  1. 单一任务栈

如果开启a.b.c.d>再开启b的话,会把b上面的c和d给清除掉

  1. 单一顶部

    如果开启的activity在最顶部,就不会创建新的activity,而是直接复用已经存在的activity

  2. 单一实例

    如果开启的activity存在,再次开启的话,会把其他的activity全部清除掉。然后只留下一个activity。

  3. 标准启动模式

activity的生命周期:

oncreacte()–>onStart()–>onResume()–>onPasuse()–>onStop()–>onDestroy()

隐藏标题栏

  • 在activity中的onCreate方法中setContentView之前设置requestWindowFeature(Window.FEATURE_NO_TITLE);

加密:RSA 与AES 加密

RSA加密:非对称加密,

是最流行的的共钥密码算法,使用长度可以变化的密钥,RSA是第一个既可以用于数据加密也能用于数字签名的算法。
算法原理:

  • 1 。随机选择两个大质数P和Q,P不等于Q,计算N=PQ;
  • 2 。选择一个大于1小于N的自然数e,e必须与(P-1)(Q-1)互素。
  • 3 。 用公式计算出D:dXe = 1(mod(p-1)(q-1)).
  • 4 。销毁P和Q。

    最终得到的N和e就是“公钥”,d就是”私钥“,发送方便使用N去加密数据,接收方只有使用D才能解开数据内容。

RSA的安全性依赖于大数分解,小于1024位的N已经被证明是不安全的,而且由于RSA算法进行的都是大数计算,使得RSA最快的情况也比DES慢上几倍,这是RSA最大的缺陷,因此通常用于加密少量数据或者加密密钥,但RSA也算一种高强度的算法。

AES加密:对称加密

定义:高级加密标准(Advanced Encryption Standard)

  • 1 AES 是android自带了包的。Base64 MD5 基于J2SE平台的。

    I/加密结果为 ( 190): BFB77D8F1E1EE9D5E252926A12659DE8
    I/解密结果( 190): 0123456789

LeakCanary

leakCanary是Square开源框架,是一个Android和Java的内存泄露检测库,如果检测到某个 activity 有内存泄露,LeakCanary 就是自动地显示一个通知,所以可以把它理解为傻瓜式的内存泄露检测工具。通过它可以大幅度减少开发中遇到的oom问题,大大提高APP的质量。

内存泄露的种类:

  • 1 错误使用单例造成的内存泄漏(Context)
  • 2 Handler造成的内存泄漏
  • 3 线程造成的内存泄漏(Activity销毁时候也应该取消相应的任务AsyncTask.cancel()方法)
  • 4 非静态内部类创建静态实例造成的内存泄漏(静态内部类不再持有外在activity的引用)
  • 5 由WebView引起的内存泄漏(Native堆内存用于保存页面元素,加载图片,内存占用更严重)
  • 6 资源未关闭造成的内存泄漏(Broadcastreceiver,ContentObserver,File,Cursor,Stream,Bitmap)应该在activity销毁时进行关闭或者注销,否则这些资源不会被回收,造成内存泄露。

你可能感兴趣的:(android面试题)