peiniwan

Results 10 comments of peiniwan

是的,我也有

需要唯一吗?  1. 需要:Set    需要制定顺序:      需要: TreeSet(指定方式排序)    不需要:HashSet    但是想要一个和存储一致的顺序(有序:怎么存怎么取):LinkedHashSet 2. 不需要:List    需要频繁增删吗?    需要:LinkedList    不需要:ArrayList **ArrayList、LinkedList的存储性能和特性** 1. ArrayList 使用数组方式存储数据(不是连续),此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢 2. LinkedList使用双向链表实现存储(将内存中零散的内存单元通过附加的引用关联起来,形成一个可以按序号索引的线性结构,这种链式存储方式与数组的连续存储方式相比,内存的利用率更高),按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 3. 由于ArrayList和LinkedListed都是非线程安全的,如果遇到多个线程操作同一个容器的场景,则可以通过工具类Collections中的synchronizedList方法将其转换成线程安全的容器后再使用(这是对装饰模式的应用,将已有对象传入另一个类的构造器中创建新的对象来增强实现)。

懒加载就是页面对用户可见时再去加载数据 使用add hide() show()方法切换fragment ,不会走任何的生命周期,无法通过生命周期进行刷新,而是使用onHiddenChanged() 当fragment结合viewpager使用的时候,显示隐藏调用的是setUserVisibleHint() 所以需要在这两个方法都判断下,让fragment显示再去加载数据,当然要先判断是否初始化完成

楼上说的很好,那我说下 一个对象实例化过程吧 例如:zi p = new zi(); 1. JVM会读取指定的路径下的zi.class文件,并加载进内存, 并会先加载zi的父类(如果有直接的父类的情况下). 2. 在堆内存中的开辟空间,分配地址。 3. 并在对象空间中,对对象中的属性进行默认初始化。 4. 调用对应的构造函数进行初始化。 5. 在构造函数中,第一行会先到调用父类中构造函数进行初始化。 6. 父类初始化完毕后,在对子类的属性进行显示初始化。 7. 在进行子类构造函数的特定初始化。 8. 初始化完毕后,将地址值赋值给引用变量.

长链接是通过发送心跳来保持连接的 长连接的重试: 1. 客户端网络空闲5秒没有进行写操作时,进行发送一次ping心跳给服务端; 2. 客户端如果在下一个发送ping心跳周期来临时,还没有收到服务端ping的心跳应答,则失败心跳计数器加1; 3. 每当客户端收到服务端的ping心跳应答后,失败心跳计数器清零; 4. 如果连续超过3次没有收到服务端的心跳回复,则断开当前连接,在5秒后进行重连操作,直到重连成功

怎么解决这个问题呢

4.一个线程可以有多个 Handler,因为 Handler 的引用被Message 持有的,msg.tagre(也就是Handler).dispatchMessage方法分发消息 5.主线程创建时传入的 quitAllowed 是 false。而子线程是paper(true),MessageQueue的quit()方法能否退出。 ``` void quit(boolean safe) { if (!mQuitAllowed) { throw new IllegalStateException("Main thread not allowed to quit."); } synchronized (this) { if...

内存优化方案1: 1. 保持核心线程始终存活 2. 将非核心线程的存活时间延长,避免频繁创建新的线程 可以避免频繁创建线程的内存分配负担和内存碎片问题 内存优化方案2: 1. 核心线程也可以回收 2. 非核心线程存活时间变短,及时回收资源 可以避免内存峰值过高的问题,及时回落