单通道多应用Push系统以service方式运行,如果一个手机安装了多个集成pushSDK的应用,只有一个service实例运行(不会每个应用都开启一个后台服务),即多个应用共享一个push通道,这样的设计目的是:减少手机运行的进程数量,减少内存使用量,减少手机的耗电量,减少网络流量。service实例运行于独立的进程中,不和主进程运行于同一进程,各个应用通过AIDL绑定到service中。
push系统的模型如下:
所需掌握的知识:AIDL ,进程共享, Socket长连接,CPU定时唤醒机制,WIFI与CPU锁
1.AIDL:主要是实现进程间通信。
2.进程共享:不同应用共享一个进程,需要在AndroidManifest.xml文件中配置。
<service android:label="PushService" android:name="com.boyaa.push.lib.service.PushService" android:process="com.boyaa.push" android:permission="com.boyaa.permission.push" android:exported="true"> <intent-filter> <action android:name="com.boyaa.push.lib.service.PushService"/> </intent-filter> </service>
3.Socket长连接:使消息实时性。
4.CPU定时唤醒:当CPU休眠时,能够唤醒CPU连接网络,也是为了尽可能使消息实时获取,使用AlarmManager定时唤醒。
5.WIFI与CPU锁:当CPU休眠唤醒时,需要拿到WIFI锁与CPU锁,是为了WIFI能够马上联网和防止CPU马上休眠,发送请求后,可以放弃WIFI和CPU锁,这样CPU可以又进入休眠状态,同时也是尽可能的节省电量。
private class LockHandler { private WifiLock mWifiLock; private WakeLock mWakelock; public void lock(Context context) { try { WifiManager wifiMgr = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); if(wifiMgr.isWifiEnabled()) { mWifiLock = ((WifiManager) context.getSystemService(Context.WIFI_SERVICE)).createWifiLock(WifiManager.WIFI_MODE_FULL , "wifiLockTAG"); mWifiLock.acquire(); } } catch (Exception e) { LogUtil.e("LockHandler", ": "+e.getMessage()); } try { mWakelock = ((PowerManager) context.getSystemService(Context.POWER_SERVICE)).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WakeLockTAG"); mWakelock.acquire(); } catch(Exception e) { LogUtil.e("LockHandler", ": "+e.getMessage()); } } public void unLock() { if(null!=mWakelock&&mWakelock.isHeld()) { mWakelock.release(); } if(null!=mWifiLock&&mWifiLock.isHeld()) { mWifiLock.release(); } } }
1.查看进程,发现只有一个名为com.boyaa.push进程
2.服务器向客户端发送数据
3.查看各个客户端接收到的信息,发现git_pushdemo_1和git_pushdemo_2都收到了Server发送过来的数据
Demo里只实现了AIDL,进程共享,socket长连接(CPU定时唤醒机制和WIFI与CPU锁并没有实现,大家可以去自己去实现),当然实际的项目开发过程中可能更复杂,这个Demo简单实现了功能,麻雀虽小五脏俱全,这里只是给大家抛砖引玉。
Demo代码参见github:https://github.com/zz7zz7zz/android-push
csdn:http://download.csdn.net/detail/zz7zz7zz/5887877
文档地址:http://download.csdn.net/detail/zz7zz7zz/6420373邮箱:zz7zz7zz@163.com
微博:http://weibo.com/u/3209971935
android 单通道多应用Push系统的设计与实现
最新推荐文章于 2022-05-27 15:01:21 发布