Android小知识点一

来源:互联网 发布:同和软件 编辑:程序博客网 时间:2024/05/01 15:43

一、内存泄漏(GC)

二、handler工作原理简述

三、toolbar


一、内存泄漏(GC)

概念:内存泄漏意思是内存没有指针指着了,没有程序管着了,但还占据着内存,就叫泄露。

一次泄露会用掉少量的内存,当程序使用很久,越来越多的内存被占据时就可能导致整个系统崩溃了。

原因:(1)数据库查询的Cursor对象没有关闭,Cursor的缓存,在java虚拟机外也有;

    (2)Bitmap没有事使用recycle回收,内存占用高;

    (3)ViewAdapter的getView中,没有使用contentView重用View,大量的View;

    (4)对象被长生命周期的对象引用,例如Activity的context被用到其它静态量上去;

          (5)其它特别消耗内存的对象。

二、handler工作原理简述

概述:它用于不同线程间进行通信,将handler的定义与handler应用放到不同的线程之中,在需要的时候,handler应用发出消息,定义handler的线程里的handle通过通过某种方法监听到消息(handle就r得被传递到其他线程或者是公共的),收到消息就执行它的handlemessage方法里的代码,起到了通信的作用。

实现原理:利用Handler,Looper,MessageQueue,Message这几个组件。

(1)线程要使用Looper管理消息,ui线程自带了一个,其他线程则需要创建一个Looper,注意一个线程最多只能有一个Looper;

(2)创建Looper时,里面就创建了一个MessageQueue,MessageQueue就是接收存储消息的队列;

(4)looper调用looper方法,死循环从messageQueue里面取消息出来(当前线程被阻塞了);

(3)handler应用调用sendMessage方法发送消息到Looper的MessageQueue中。(这里Handler源码中获取了Looper和Message的引用);

(4)looper.loop()方法取到了消息,调用handler的onHandleMessage方法

具体用法:

新线程 thread{

Looper.prepare();

Handler handler 定义;

Looper.loop();

}

其他线程:

thread.handler.sendMessage();

三、toolbar要设置

(1)setSupportActionBar(toolbar);
之后才能想actionbar一样进行操作,不如设置菜单。
(2)隐藏标题栏
调用activity的setTitle("");方法设置;
使用toolbar的seTitle方法不起作用;

(3)toolbar里面的布局 不能设置padding,不知道为什么,用组件代替。

(4)

CoordinatorLaout和
<android.support.design.widget.AppBarLayout<android.support.design.widget.CollapsingToolbarLayout
组合实现toolbar先显示大的,向上滑动在显示小的的功能。

0 0