您的位置:首页 > 移动开发 > Android开发

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

2015-10-27 21:08 211 查看
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()方法进行处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: