笔记 简略

88 阅读2分钟

静态变量、单例模式在多进程会失效,为什么?

android为每个进程都分配了一个独立的虚拟机。修改静态变量只对自己的进程有效。

组件跑在别的进程,系统在创建新进程的同时还要分配独立的虚拟机,就相当于重启了应用,所以Application会被创建多次。

不同进程的组件的确会拥有独立的虚拟机、Application以及内存空间

Serializable是Java中的序列化接口,其使用起来简单但是开销很大,因为序列化和反序列化过程需要大量I/O操作。而Parcelable是Android中的序列化方式,它的缺点就是使用起来稍微麻烦点,但是它的效率很高。Parcelable主要用在内存序列化上,通过Parcelable将对象序列化到存储设备中或者将对象序列化后通过网络传输也都是可以的,但是这个过程会稍显复杂,因此在这两种情况下建议大家使用Serializable。以上就是Parcelable和Serializable和区别。

线程的生命周期

线程的生命周期包含5个阶段,包括:新建、就绪、运行、阻塞、销毁(死亡)。

新建:就是刚使用new方法,new出来的线程;(new)

就绪:就是调用的线程的start()方法后,这时候线程处于等待CPU分配资源阶段,谁先抢的CPU资源,谁开始执行;(Runnable)

运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态,run方法定义了线程的操作和功能;(Running)

阻塞:在运行状态的时候,可能因为某些原因导致运行状态的线程变成了阻塞状态,比如sleep()、wait()之后线程就处于了阻塞状态,这个时候需要其他机制将处于阻塞状态的线程唤醒,比如调用notify或者notifyAll()方法。唤醒的线程不会立刻执行run方法,它们要再次等待CPU分配资源进入运行状态;(Blocked)

销毁:如果线程正常执行完毕后或线程被提前强制性的终止或出现异常导致结束,那么线程就要被销毁,释放资源;(Dead)

Binder