StatusBar图片加载机制
来源:互联网 发布:ipad格子音乐软件 编辑:程序博客网 时间:2024/05/18 03:19
转载出处http://www.cnblogs.com/zhixingwujiang/archive/2011/10/25/2224373.html
Android的StatusBar分析
这里仅讨论状态栏右半部分,不包括Notification部分。开机初始化相关略。以电池电量显示为例,大概关键步骤如下:
1 通过BroadcastReceiver机制,StatusBarPolicy中注册的mIntentReceiver收到BatteryService广播的ACTION_BATTERY_CHANGED事件触发;
2 调用updateBattery(intent)开始更新电池状态栏;
3 从intent中解析需要的字段,调用StatusBarManager的setIcon()。StatusBarManager是客户端使用的状态栏管理类;
4 通过IBinder机制跨进程调用StatusBarManagerService的setIcon()。StatusBarManagerService派生于IStatusBarService.Stub,是状态栏管理的服务端,是具体实现;
5 StatusBarManagerService有一个StatusBarIconList成员,这个list成员在StatusBarManagerService创建时,从R.array.config_statusBarIcons加载生成。StatusBarManagerService的setIcon()过程中,会又"battery"字段获得在StatusBarIconList中的索引,再由包名、图片id和等级创建StatusBarIcon实例,并将这个实例更新StatusBarIconList中所获得索引对应项;
6 调用CommandQueue的setIcon()。CommandQueue派生于IStatusBar.Stub,有一个内部接口Callbacks,这个接口的实现就是StatusBarService。CommandQueue、StatusBarService和StatusBarManager属于同一个进程,而StatusBarManagerService是一个系统级服务,它们之间必然需要通过IBinder进程间通信;
7 CommandQueue用于处理状态栏、通知相关的请求,内部维护了一个事件队列,setIcon()会创建一个OP_SET_ICON的massege,发送给Handler处理;
8 CommandQueue内部也有一个StatusBarIconList实例,这个实例是由StatusBarService创建。在处理OP_SET_ICON的massege前,会先通过getViewIndex获得图标View的位置索引viewIndex,(因为有些图标有可能为空)再更新StatusBarIconList,最后调用Callbacks,也就是StatusBarService的addIcon()或者updateIcon();
9 以addIcon()为例,StatusBarService的addIcon()会创建一个新的StatusBarIconView,将第5步中所创建的StatusBarIcon实例设置进去,然后把这个view添加到LinearLayout的viewIndex位置。
这样一个电池相关图标就在状态栏上添加或者更新了。删除操作类似。
另:
IStatusBarService.aidl和IStatusBar.aidl在platform\frameworks\base\core\java\com\android\internal\statusbar中
<string-array name="config_statusBarIcons"> <item><xliff:g id="id">ime</xliff:g></item> <item><xliff:g id="id">sync_failing</xliff:g></item> <item><xliff:g id="id">sync_active</xliff:g></item> <item><xliff:g id="id">gps</xliff:g></item> <item><xliff:g id="id">bluetooth</xliff:g></item> <item><xliff:g id="id">nfc</xliff:g></item> <item><xliff:g id="id">tty</xliff:g></item> <item><xliff:g id="id">speakerphone</xliff:g></item> <item><xliff:g id="id">mute</xliff:g></item> <item><xliff:g id="id">volume</xliff:g></item> <item><xliff:g id="id">wifi</xliff:g></item> <item><xliff:g id="id">cdma_eri</xliff:g></item> <item><xliff:g id="id">data_connection</xliff:g></item> <item><xliff:g id="id">phone_evdo_signal</xliff:g></item> <item><xliff:g id="id">phone_signal</xliff:g></item> <item><xliff:g id="id">battery</xliff:g></item> <item><xliff:g id="id">alarm_clock</xliff:g></item> <item><xliff:g id="id">secure</xliff:g></item> <item><xliff:g id="id">clock</xliff:g></item> </string-array>
详细序列图如下:
- StatusBar图片加载机制
- Android图片加载机制
- ListView 异步加载图片机制
- 图片加载机制的比较
- android4.0 statusbar加载icon
- android4.0 statusbar加载icon
- [android_gallery_4.0]gallery补充,加载图片机制
- ImageLoader双缓存机制加载图片
- android 异步加载网络图片缓存机制
- 关于Android加载图片机制分析
- cocos2d-x中的图片异步加载机制
- 简单实现三级缓存加载图片机制
- iOS 图片加载机制 —FastImageCache解析
- SDWebImage加载图片的缓存机制原理
- 用双缓存机制异步加载图片
- Android ListView 图片异步加载和图片内存缓存机制
- StatusBar
- statusbar
- C++之模板
- PHP中全局变量$_REQUEST、 $_GET、 $_POST、 $_COOKIE 的关系和区别 (转载)
- 跟我学jquery(二)大话jquery选择器
- 学位英语
- 跟我学jquery(三)jquery动态创建元素和常用函数示例
- StatusBar图片加载机制
- QT Creator环境升级出现的问题 ~exited with code -1073741511
- FND Debug Log(FND_LOG_MESSAGES)
- myeclipse中打断点出现Unable to install breakpoint in ...
- 找出单链表的倒数第n个元素
- LuaDoc 3.0.1 Lua源代码文档生成工具
- LBS中从数据库查询某经纬度2KM范围内的数据 - 针对大数据量的性能优化
- 15个值得开发人员关注的jQuery开发技巧和心得 .
- POJ 3051 Satellite Photographs 图的连通块,dfs即可。大水题。