2018.11.8
知识点:Runnable和Thread的区别:
1.Thread实现了Runnable接口并进行了扩展,所以Thread和Runnable是实现的关系,不是同类关系。
2.很多博客会指出区别是资源共享的问题,事实上Thread+synchronized的线程完全可以实现相同效果,所以在实现效果上并无差别。
3.Runnable的使用好处在于,用实现了Runnable的类可以多一个继承类。
翻微博,有意思的看到 据说是科学上看起来最舒服的十种颜色
2018.11.9
理解希尔排序结构
解决bug:mqtt返回后如果要操作控件,忘记回到主线程
2018.11.13
ExecutorService 线程池实现
USB实现串口通信:
1.从主线程获取UsbManager
UsbManager mUsbManager= (UsbManager) (Activity或者Fragment对象).getActivity().getSystemService(Context.USB_SERVICE);
2.从接口获取usb字段,UsbSerialPort中匹配到usb设备,usb连接
3.根据协议,将十六进制写入
2018.11.16
onStart和onStop是从Activity是否可见这个角度来回调的,在ActivityStack中的resumeTopActivityInnerLocked方法中可以看出,在新的Activity启动之前,栈顶的Activity需要先onPause后,新Activity才能启动。(而onResume和onPause是从Activity是否位于前台这个角度来回调的。)
从源码看Activity的启动,首先启动Activity的请求会由Instrumentation来处理,然后它通过Binder向AMS发请求,AMS内部维护着一个ActivityStack并负责栈内的Activity状态同步,AMS通过ActivityThread去同步Activity的状态从而完成生命周期的调用。
2018.11.17
异常情况下Activity的生命周期
1.当系统配置发生改变后,Activity会被销毁并重新创建,onPause、onStop、onDestroy均会被调用,同时由于Activity在异常条件下终止的,系统会调用onSaveInstanceState来保存当前Activity的状态。调用时机在onStop之前,可能在onPause之前,也可能在onPause之后。当Activity被重新创建后,系统会调用onRestoreInstanceState,并且把Activity销毁时onSaveInstanceState方法所保存的Bundle对象作为参数同事传递给onRestoreInstanceState和onCreate方法。
2.资源内存不足导致低优先级的Activity被杀死(前台Activity>可见非前台Activity>后台Activity),没有四大组件的进程容易被系统杀死,所以后台工作建议放入Service。
不想让Activity在屏幕旋转的时候重建,android:configChanges="orientation"
每个View都有onSaveInstanceState和onRestoreInstanceState这两个方法,
保存和恢复View层次结构:1.Activity意外终止,Activity调用onSaveInstanceState保存数据
2.Activity委托Window去保存数据,接着Window再委托它的顶级容器(VIewGroup,一般为DecorView)去保存数据
3.顶层容器通知子元素去保存数据
2018.11.19
Launcher是手机中的一个管理其他apk启动图标的应用,比如安装应用的时候,Launcher会先收到一个广播,然后为应用创建图标,存入数据库。
app冷启动:后台没有该应用的进程时,分配新线程,创建和初始化Application,然后创建和初始化启动的Activity(onCreate onMesure onLayout,ondraw),显示到界面上。
app热启动:从已有进程中启动,创建和初始化启动的Activity
冷启动
2018.11.21
内存溢出(out of memory),是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。
内存泄露(memory leak),是指程序在申请内存后,完事儿之后,仍被其他对象持有其引用,而无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,最终会导致内存溢出。
2018.11.22
遇到一个bug,Glide加载网络图片,Android P加载失败,原因是因为网络图片是http,Android P的系统上面默认所有Http的请求都被阻止了
解决: <application android:usesCleartextTraffic="true">
2018.11.26
http的method:
GET方法将参数拼接在request-url尾部,http协议没有对url长度进行限制,但是浏览器和服务器可能有限制,所有GET方法发起的请求参数不能太长,而POST方法发起的请求是将参数放在请求体中的,所有不会有GET参数的问题。
GET方法是指从服务器获取某个URL资源,可以看作是一个读操作,同一个URL进行多次GET并不会对服务器产生什么影响。而POST通常是对某个URL进行添加、修改,例如一个表单提交,通常会往服务器插入一条记录。多次POST可能导致服务器的数据库中添加了多条记录。
2018.11.28
Handler创建的时候会采用当前线程的Looper来构造消息循环系统,ThreadLoacl是一个线程内部的数据存储泛型类,同一个对象可以在不同线程中不受干扰的存储和提供数据,所以对于不同线程不同的Looper,ThreadLoacl可以轻松实现Looper在线程中的存取。(访问同一个ThreadLocal的get方法,ThreadLoacl内部会从各自的线程中取出一个数组,然后再从数组中根据当前ThreadLocal的索引去查找对应的value值)