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方法来实现。
- 为什么给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 动画:
- 帧动画:这类动画可以创建一个Drawable系列,按照一定的时间间歇来显示图片
补间动画:动画缩放,旋转,移动,伸展,淡出等
1、Alpha:淡入淡出效果
2、Scale:缩放效果
3、Rotate:旋转效果
4、Translate:移动效果- 属性动画
5 activity的四种启动模式
- 单一任务栈
如果开启a.b.c.d>再开启b的话,会把b上面的c和d给清除掉
单一顶部
如果开启的activity在最顶部,就不会创建新的activity,而是直接复用已经存在的activity
单一实例
如果开启的activity存在,再次开启的话,会把其他的activity全部清除掉。然后只留下一个activity。
- 标准启动模式
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销毁时进行关闭或者注销,否则这些资源不会被回收,造成内存泄露。