Android能否实现一键清理后台程序后程序自启动(类似QQ微信不被清理软件杀死)

答案是 不能

 

用过苹果的人都知道苹果app即使app被杀掉也能收到推送消息,这是因为苹果服务器及自带的推送机制,苹果服务器可以找到每个苹果手机进行推送,但是谷歌不提供推送使得我们希望实现如苹果一样的体验,但是Android可以吗,答案是不可以,那为什么QQ可以,微信可以,QQ微信不管是手机自带的清理、百度清理、360清理都杀不掉进程都能实时收到消息,为什么呢?

 

追根溯源,为什么会有那么多清理软件?在标准Android操作系统的旧版手机上,一键清理掉app时进程并没有被真正结束,服务也没有被结束,随着手机内存越来越大,有些人在手机上会装好几十个app,倘若每个app都开启一个服务在后台运行的话,无疑会使得内存消耗激增,导致手机变卡,因此市面上推出了一些一键清理的手机管家app,以及手机自带的清理软件,但是QQ和微信真的能躲开掉清理软件不被杀掉吗?

 

我们查看手机设置中的应用程序管理可以发现QQ微信在后台是开启了2或3个进程,于是网上有大片言论说采用双进程守护的方法,即创建两个进程互相监听,一个死掉时另外一个可立即监听到并将其重启,微信是开启了两个进程,QQ和一刻甚至是开启了三个进程,这种方法听起来是很有道理,而且不少应用也都是采用这种双进程的方法看起来可以做到完全保护,因此不少开发者认为这个是解决问题的关键。

 

于是笔者开始了一番测试,经测试发现,使用大部分清理软件的时候,QQ和微信确实都不会被杀掉,但是其他程序会被杀掉,但是并不是QQ和微信在程序中做了特别设置,读者看到以下测试方法便可了解:

 

1、首先测试一下到底是不是因为网上说的多进程守护导致app没有被杀掉的:在笔者的测试手机里选取创建2个或2个以上进程的app分别为:微信 (创建了2个进程),UC浏览器(创建了2个进程),百度地图(创建了2个进程),一刻(创建了3个进程),XXX(创建了1个进程),自己的app(创建了1个进程),依次开启这几个app;

 

2、采用手机自带的清理软件,发现除了微信,其余的都被清理掉了,采用360助手也是如此,由此说明,app能否被清理掉和你在后台开启了几个进程没有关系,笔者猜测所谓的那几个进程只是为了把推送等服务功能分开管理,由此证明app是否能被杀掉和在后台开了几个进程没关系;

 

3、于是笔者又下载了一个“野路子”清理软件,该清理软件叫做“一键清理(乐安全)“,点击清理会发现所有的app都被清掉了,微信也没能幸免于难,但是该清理软件可以做特殊设置,如设置哪些app不被清理掉,即所谓的“白名单”,想必360这种清理软件已经默认将微信和QQ设置为白名单了。

 

为什么要设置为白名单呢?

这是顾忌到自己app的体验问题,因为太多的用户需要QQ和微信全天在线并实时收消息,如果用户一清理,QQ和微信就要重启,再清理再重启,无疑使得用户体验变差,耗电量变快,导致用户将清理软件卸载掉,所以不少清理软件自动将QQ和微信设置为白名单,在清理后台程序的时候不对这两款软件进行清理。

 

由此,可以总结出,技术角度无法实现自己的app不被清理掉,除非是系统级应用(及手机自带的应用)或者清理软件把你设置为白名单。

 

此外,网上不少言论说是腾讯公司和这些查杀软件厂商进行合作签了协议,但是笔者找到微信开发的一个朋友问过,并没有做合作,又辗转找到一个做腾讯手机管家的朋友,确定了的确是有"白名单"的问题,且用户手机如果安装了某些手机管家,这些手机管家会对自己的相关产品做保护(如不被其他软件管家杀掉等)。

 

当然,网上还有一种所谓的“终极解决方案”,即通过JNI在Linux层fork一个新的子进程来监听主进程是否在运行,笔者亲测该方法确实能监听到主进程被杀掉了,但是执行linux下的execlp方法时未能将主进程拉起,笔者猜测是没有权限的问题,但是究其原因,有待继续研究,也希望研究出来的朋友能留言告知,一起进步。相关文档可参考http://94it.net/a/jingxuanboke/2014/0622/354671.html

 

总结一下,想让你的app不被清理掉的话,那就把app做好吧,让用户离不开你的app,这样一些清理软件在清理app的时候就会自动把你保护起来了~


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
实现微信程序一键登录,可以使用uni-app提供的uni.login()方法获取用户的code,然后将code发送到服务器端,由服务器端再向微信服务器发起请求获取用户的openid和session_key,最后将openid和session_key返回给前端,前端可以将其存储在本地或者发送到服务器端进行登录验证。 以下是一个简单的示例代码: ```javascript // 在uni-app页面调用uni.login()方法获取用户的code uni.login({ provider: 'weixin', success: function (res) { if (res.code) { // 将code发送到服务器端进行处理 uni.request({ url: 'http://example.com/login', method: 'POST', data: { code: res.code }, success: function (res) { // 将服务器返回的openid和session_key保存在本地或者发送到服务器端进行登录验证 uni.setStorageSync('openid', res.data.openid); uni.setStorageSync('session_key', res.data.session_key); } }); } else { console.log('登录失败!' + res.errMsg) } } }) ``` 在服务器端,可以使用微信提供的接口进行openid和session_key的获取,示例代码如下: ```php <?php $appid = 'your_appid'; $secret = 'your_secret'; $code = $_POST['code']; $url = 'https://api.weixin.qq.com/sns/jscode2session?appid=' . $appid . '&secret=' . $secret . '&js_code=' . $code . '&grant_type=authorization_code'; $result = file_get_contents($url); $data = json_decode($result, true); // 返回openid和session_key echo json_encode(array( 'openid' => $data['openid'], 'session_key' => $data['session_key'] )); ?> ``` 以上代码仅为示例,实际应用需要根据具体业务需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值