不可不知的android开发冷知识1

1、Toast显示时长只有2种设置:Toast.LENGTH_LONG和Toast.LENGTH_SHORT,分别为3.5S和2S。第三个参数API文档虽然写了是时间,但是在Framework里作了重定义。


2、Intent传递数据时,除了可以传递基本数据外,还可以传递对象,但是对象需要实现Serializable接口或者Parcelable接口,由于File实现了Serializable接口,所以Intent可以传递File对象。


3、Button等组件需要在setContentView后才可以findViewById,否则会报ResourceNotFoundExeception。


4、系统可能产生ANR时间:Activity是5S,BroadcastReceiver是10S,Service是20S.


5、GLSurfaceView是一个视图,继承自SurfaceView,它内嵌Surface负责OpenGL渲染。

GLSurfaceView的特性为:

1、管理一个surface,这个surface是一块特殊的内存,能直接排版到view上。

2、管理一个EGL显示,能让OpenGL渲染到一个平面。

3、接受一个用户提供的实际显示的Renderer对象。

4、使用一个专用线程渲染,从而和UI主线程分离。

5、支持按需渲染和连续渲染。

6、可选的包、追踪和调试。


6、线程间通信机制

首先,Looper、Handler、MessageQueue三者共同实现了android系统中线程通信机制,如A、B两个子线程间需要传递消息,首先给每个子线程绑定一套handler、looper、

messageQueue机制,这三个对象都与其所属线程对应。然后A线程通过调用B线程的handler发送消息,消息被发送到B线程的messageQueue中,B线程的looper一直无限遍历messageQueue,一但发现队列收到新消息,就会对消息进行处理,处理过程中调用handler的handleMessage()方法,从而实现不同线程间的通信。


7、Looper实现原理

Looper类内部包含一个消息队列对象和一个线程对象。当创建Looper对象时,会自动创建一个空消息队列和一个未绑定的内部线程。当调用Looper.prepare()方法后,会让消息队列指向当前线程的消息队列,让空线程绑定当前线程,然后looper会自动进入无限for循环中,不断遍历消息队列,当有消息时会回调hanlder的handleMessage()方法进行处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值