关于个推的一点想法

  最近项目中用到了个推做推送,关于个推的接入步骤官网有很详细的步骤,这里不说,不过正是由于使用个推,引起了一点其他的思考,那就是个推是怎么做到即便把app应用进程在后台杀掉,也能接受到消息。

  说到这个问题,先说一个我日常时候android app的一个体会,我们经常打开某一个不常用的应用,打开的同时会弹出很多这个app和其他不常用app的推送消息(注意是其他且不常用的app)。为什么呢?因为好多推送平台都使用了一个叫“看护联盟”的东西。

  个推官网上说,个推的sdk可以在后台常驻且不会耗费太多电量。这个是怎么实现的呢?其实android4.0后没有什么应用是能在后台常驻的,手动的杀掉后台或是当内存不够的时候都会让android杀掉后台的sdk。而另一个方面,加入每个app的个推sdk都在后台常驻的话,电量的消耗是难以想象的。所以个推使用了一个很巧妙的方式:就是将所有手机上使用个推的app都共用一条长连接,这样的就保证app再多也只有一条长连接(常驻后台的sdk)。同时加入我们手动清除后台后(事实上我们也不会清理所有后台,有些应用是我们自己设置的后台接受消息),只要有一个我们经常使用的app打开后,那么这条长连接就会生效,那么所有使用个推的app就可以正常接受推送消息,这样就实现了高频应用带动低频应用,给我们一种个推在后台常驻的感觉。

  那么如果我们需要自己搞一个进程在后台一直保留,怎么办呢?(强调一点,这个做法是极度不推介的。无论是出于自己app的体验还是考虑到整个android系统的角度,都不推介这样做。安卓手机总是越用越卡很大程度上就是有越来越多的app进程常驻后台,不负责任)。

  方法有这么几种:

  • Service设置成START_STICKY,kill 后会被重启(等待5秒左右),重传Intent,保持与重启前一样
  • ?通过 startForeground将进程设置为前台进程,做前台服务,优先级和前台应用一个级别?,除非在系统内存非常缺,否则此进程不会被 kill
  • 双进程Service:让2个进程互相保护,其中一个Service被清理后,另外没被清理的进程可以立即重启进程
  • QQ黑科技:在应用退到后台后,另起一个只有 1 像素的页面停留在桌面上,让自己保持前台状态,保护自己不被后台清理工具杀死
  • 在已经root的设备下,修改相应的权限文件,将App伪装成系统级的应用(Android4.0系列的一个漏洞,已经确认可行)
  • Android系统中当前进程(Process)fork出来的子进程,被系统认为是两个不同的进程。当父进程被杀死的时候,子进程仍然可以存活,并不受影响。鉴于目前提到的在Android-Service层做双守护都会失败,我们可以fork出c进程,多进程守护。死循环在那检查是否还存在,具体的思路如下(Android5.0以下可行)
  1. 用C编写守护进程(即子进程),守护进程做的事情就是循环检查目标进程是否存在,不存在则启动它。
  2. 在NDK环境中将1中编写的C代码编译打包成可执行文件(BUILD_EXECUTABLE)。
  3. 主进程启动时将守护进程放入私有目录下,赋予可执行权限,启动它即可。
  • 联系厂商,加入白名单
时间: 2024-10-22 10:54:50

关于个推的一点想法的相关文章

关于UED前端开发的一点想法

5.2 关于UED前端开发的一点想法 5.2.1 目前UED前端代码是一个页面对应一个JS文件,更有甚者一个JS文件的代码会超过万行,这样的代码试想该如何维护?如果在从事前端开发的时候避免这种尴尬的局面,我想最好的方式就是分而治之, 如果分而治之?首先解析页面的一般思路,初始化(init) 事件绑定(event)页面读值(getData)页面写值(setData)重置页面(resetData)页面展示(setView)页面校验(checkData)页面异步加载 (ajax),页面测试(test)

多应用统一开发平台的一点想法

几年工作下来,发现有一个问题一直困扰着我们: 随着项目的越来越完善,功能越来越丰富,单一一个应用已经不能够支撑开发人员的需要.于是我们就需要根据业务分拆成几个相对独立的应用来满足多个开发团队的需求.但是这样也造成了一些问题,多个应用需要公用的基础代码维护起来越来越复杂,导致种种问题.也有很多种方式来解决,比如公共代码放置单独的地方,这样有带来的自动化部署方面的困难.在此,鄙人提出一种解决方法,即多应用统一开发平台的概念.在此以rails应用为例. 标准的rails应用结构如下: Gemfile

对当前网络路由的一点想法

五一小长假,和朋友开车去了浙江,发现了"基于目的地的最短距离算法"的弊端,也许就是这个算法导致了高速公路在某个时间段的定期规律性拥堵!从嘉定出发,G1501一路畅通,但是一旦转到G60沪昆高速,瞬间拥堵起来,实际上,早在G1501上时,就有公告牌,说沪昆高速有施工,可是大家还是全部转到了沪昆高速,留下S19/G15成了被抛弃的摆设...知道原因是什么吗?很简单,因为沪昆高速那条路最近!人们太相信导航,很少有人没事研究地图,所以很多人都上了当,当然这并不包括我.很多导航都是根据Dijks

Installshield关于.NET安装时需要重启动的处理办法,以及延伸出的重启后继续安装的安装包的一点想法

原文:Installshield关于.NET安装时需要重启动的处理办法,以及延伸出的重启后继续安装的安装包的一点想法 很多朋友做安装包的时候,所打包的软件需要.NET Framework之类的环境,他们会检测系统是否已经安装了.NET,如果没有,则调用.NET安装包来安装.但是.NET安装完是需要重启动的,一般来说,我们都推荐使用/q/norestart的静默安装函数来使重启动推迟到安装结束时,使用如下:LaunchAppAndWait(SUPPORTDIR^"dotNetFx40_Full_x

关于标签系统的又一点想法。

前段时间,写过一篇<关于标签系统的一点想法.>.但其实没有谈到里面的内容,是有一部分来自与刘鑫老师的聊天,当时他给了我许多肯定,也是让我觉得记录下来很有必要的原因. 前一篇里没有提到,我跟刘老师谈到一个更加深入一点的.关于标签系统的想法.主要原因是因为我尚不肯定这是否也属于标签系统.直到最近disylee 送了一本标签 : 标记系统设计实践给我,里面的一个小节让我为自己的想法找到了理论依据. 很不错的一本书,没有让我失望,解答了我心中的一些困惑.书有点啰嗦,但也正因为此显得"系统&q

有点想法系列:借助海尔平台打造智能家居的一点想法

前言:这只是本人做了一个无线通信项目,看了一篇文章,吃了一顿饭,饭桌上和同事讨论了手机行业(原谅京瓷和NEC都做过手机啊,原谅楼主村里人 没见识,感叹惊讶一下),之后加班,胡思乱想产生的个人想法,请不要嘲笑,照顾一下作者的弱小心灵,传播正能量. 物联网专业在我的母校西安理工大学已经开设,(分属计算机学院和自动化学院),最近畅想了一下智能家居,发现物联网这个很火爆的话题和概念,这么 多年了,却是依旧是现实中火不起来,比如海尔张瑞敏说的这么多年的要把海尔互联网化,其实现在海尔却仍是一个制造型企业,今

对创业团队的一点想法

本人 没有强大的技术,没有广阔的人脉,没有超前的远见,只因在创业团队中待过一年,有了一些想法,即记录下来.这里对给我这次机会的公司表示感谢!这里说提互联网及软件方向的创业团队. 1. 不宜过早制度化 当然,对于打卡这样的制度并不排斥.但是对于对上百人团队的管理方法,不宜过早产生.比如详细区分不同部门,部门与部门有专门负责人.做一次软件发布要层层审批,经过同意后,再到发布,已经又有很多问题修复了. 部门与部门之间建立负责人,本意是为了不让沟通变的混乱,但创业团队,每个部门又能有多少人,本来只是找某

软件工程课程教育的一点想法

大学本科的软件工程课程一直遵循瀑布型的为线索的各个里程碑的相关知识点的展开介绍,现在多有理论框架与实践能力孰重孰轻之争.这里我也有一点点自己的看法. 软件工程在项目开发教学中的作用实质上类似计算机导论在计算机教育中的学科地位,应当属于前导性,线索性,框架式介绍,细思量其内容之广.理论之重.实践之繁的教学之繁重,本身就不是一个学期能承载得了的.既然教学大纲只安排一个学期,充其量,将来慢慢发展应当只是领学习者进门的而一个入门学科而已.而不是有些人说的那么危及及乎的想法. 站在更高一些的高度,比如体系

在老男孩学习的一点想法

今天是2015年12月28日,再过3天就是2016了,时间过得真快. 转眼间已经在老男孩学习快4个月了,整个课程即将结束,说一下在老男孩这段时间学习的感受. 老男孩是不是一个好老师,这个不需要我来说,凡是知道老男孩的都应该知道.O(∩_∩)O哈哈~~老师说,思维决定高度.从零开始学习一门新的知识,最重要的要有一个自己的框架,然后把一个一个零碎的知识点放到框架上.对于运维来说更是如此,因为运维所涉及的知识点更多,更杂,更乱,如果没有一个完整的清晰的整体知识框架,根本就不可能在运维这条路上有多大发展