导航:首页 > 操作系统 > android不死服务

android不死服务

发布时间:2023-03-30 20:37:24

‘壹’ android 怎么做微信 QQ 那种杀不死的服务

在你的手机的后台管理哪里选着永不杀除就可以了

‘贰’ android 怎么做微信 QQ 那种杀不死的服务

QQ微信也是可能被安败哪虚全软件杀掉进察燃程的
比如我的小米手机,长按home键一键缓扰消除,就什么都干掉了
但是,微信一会又会启动了
其实原理很简单
android上可以注册几个广播,例如开机广播,网络状态监听(信号变动都会触发),锁屏,解锁等等
然后在广播里启动你的service就可以实现自动启动了
但是很多手机可以设置禁止自启

‘叁’ android后台服务保持,不被杀死

作者:闭关写代码
链接:https://www.hu.com/question/29826231/answer/71207109
来源:知乎
着作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

强烈建议不要这么做,不仅仅从用户角度考虑,作为Android开发者也有责任去维护Android的生态环境。现在很多Android开发工程师,主力机居然是iPhone而不是Android设备,感到相当悲哀。
从技术角度概括一下现在普遍的防杀方法

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以下可行)
用C编写守护进程(即子进程),守护进程做的事情就是循环检查目标进程是否存在,不存在则启动它。
在NDK环境中将1中编写的C代码编译打包成可执行文件(BUILD_EXECUTABLE)。
主进程启动时将守护进程放入私有目录下,赋予可执行权限,启动它即可。
联系厂商,加入白名单
------------------------------------------------------
TIP: 面对各种流氓软件后台常驻问题,建议使用“绿色守护”来解决,可是杀掉那些第三方清理工具难以清除的后台程序

‘肆’ android开发怎么让个推服务不被手机系统杀掉

1.在service中重写下面的方法,这个方法有三个返回值,START_STICKY是service被kill掉后自动重写创建[代码]java代码:@(Intentintent,intflags,intstartId){returnSTART_STICKY;}----------------@(Intentintent,intflags,intstartId){//TODOAuto-generatedmethodstubLog.v("TrafficService","startCommand");flags=START_STICKY;returnsuper.onStartCommand(intent,flags,startId);//returnSTART_REDELIVER_INTENT;}2.在Service的onDestroy()中重启Service.publicvoidonDestroy(){IntentlocalIntent=newIntent();localIntent.setClass(this,MyService.class);//销毁时重新启动Servicethis.startService(localIntent);}用 管家杀掉进程的时候,调用的是系统自带的强制kill功能(即settings里的),在kill时,会将应用的整个进程停掉,当然包括service在内,如果在running里将service强制kill掉,显示进程还在。不管是kill整个进程还是只kill掉进应用的service,都不会重新启动service。不知道你是怎么实现重启的,实在是不解。在eclipse中,用stop按钮kill掉进程的时候,倒是会重启serviceKILL问题:1.settings中stopserviceonDestroy方法中,调用startService进行Service的重启。2.settings中forcestop应用捕捉系统进行广播(action为android.intent.action.PACKAGE_RESTARTED)3.借助第三方应用kill掉runningtask提升service的优先级service开机启动今天我们主要来探讨android怎么让一个service开机自动启动功能的实现。Android手机在启动的过程中会触发一个StandardBroadcastAction,名字叫android.intent.action.BOOT_COMPLETED(记得只会触发一次呀),在这里我们可以通过构建一个广播接收者来接收这个这个action.下面我就来简单写以下实现的步骤:第一步:首先创建一个广播接收者,重构其抽象方法onReceive(Contextcontext,Intentintent),在其中启动你想要启动的Service或app。[代码]java代码:importandroid.content.BroadcastReceiver;importandroid.content.Context;importandroid.content.Intent;importandroid.util.Log;{//重写onReceive方法@OverridepublicvoidonReceive(Contextcontext,Intentintent){//后边的XXX.class就是要启动的服务Intentservice=newIntent(context,XXXclass);context.startService(service);Log.v("TAG","开机自动服务自动启动..");//启动应用,参数为需要自动启动的应用的包名Intentintent=getPackageManager().getLaunchIntentForPackage(packageName);context.startActivity(intent);}}第二步:配置xml文件,在receiver接收这种添加intent-filter配置[代码]java代码:第三步:添加权限如何实现一个不会被杀死的进程看Android的文档知道,当进程长期不活动,或系统需要资源时,会自动清理门户,杀死一些Service,和不可见的Activity等所在的进程。但是如果某个进程不想被杀死(如数据缓存进程,或状态监控进程,或远程服务进程),应该怎么做,才能使进程不被杀死。addandroid:persistent="true".xml切记,这个不可滥用,系统中用这个的service,app一多,整个系统就完蛋了。目前系统中有phone等非常有限的,必须一直活着的应用在试用。提升service优先级的方法Android系统对于内存管理有自己的一套方法,为了保障系统有序稳定的运信,系统内部会自动分配,控制程序的内存使用。当系统觉得当前的资源非常有限的时候,为了保证一些优先级高的程序能运行,就会杀掉一些他认为不重要的程序或者服务来释放内存。这样就能保证真正对用户有用的程序仍然再运行。如果你的Service碰上了这种情况,多半会先被杀掉。但如果你增加Service的优先级就能让他多留一会,我们可以用setForeground(true)来设置Service的优先级。为什么是foreground?默认启动的Service是被标记为background,当前运行的Activity一般被标记为foreground,也就是说你给Service设置了foreground那么他就和正在运行的Activity类似优先级得到了一定的提高。当让这并不能保证你得Service永远不被杀掉,只是提高了他的优先级。从Android1.5开始,一个已启动的service可以调用startForeground(int,Notification)将service置为foreground状态,调用stopForeground(boolean)将service置为background状态。我们会在调用startForeground(int,Notification)传入参数notification,它会在状态栏里显示正在进行的foregroundservice。backgroundservice不会在状态栏里显示。在Android1.0中,将一个service置为foreground状态:setForeground(true);mNM.notify(id,notification);将一个service置为background状态:mNM.cancel(id);setForeground(false);对比看出,在1.0API中调用setForeground(boolean)只是简单的改变service的状态,用户不会有任何觉察。新API中强制将notification和改变service状态的动作绑定起来,foregroundservice会在状态栏显示,而backgroundservice不会。Remoteservicecontroller&binding跨进程调用Service。暂时不研究。如何防止Android应用中的Service被系统回收?很多朋友都在问,如何防止Android应用中的Service被系统回收?下面简单解答一下。对于Service被系统回收,一般做法是通过提高优先级可以解决,在AndroidManifest.xml文件中对于intent-filter可以通过android:priority="1000"这个属性设置最高优先级,1000是最高值,如果数字越小则优先级越低,同时实用于广播,推荐大家如果你的应用很重要,可以考虑通过系统常用intentaction来触发。

‘伍’ 怎么让 Android 程序一直后台运行,像 QQ 一样不被杀死

1、首先要保证你的程序一直在于后台运行,也就是所谓和守护程序一样,而且在任何认为kill和系统内存回收kill后,保证重启。
2、获取系统内部资源。
3、上报策略,间隔时间上报还是按月按天上报。
4、监测网络,当网络开启的时候第一时间上报数据。
5、服务器连接。
对于以上问题的解决:
1、利用广播BroadcastReceiver监听,当系统启动时启动服务service,监听的action是
android.intent.action.BOOT_COMPLETED,当服务被kill时在onDestroy()再次启动服务,在
onStartCommand()中 设置 flags = START_STICKY;return
super.onStartCommand(intent, flags, startId),保证服务重启。
2、利用getPackageManager(),getInstalledPackages(),getApplicationInfo()来获取系统安装数据。
3、上报策略可以每天(时间间隔24小时),但是不是很准确,一般按日上报不做时间间隔这样个人认为比较准确。
4、检测开启网络上报数据,还是利用广播BroadcastReceiver监听,监听action为android.net.conn.CONNECTIVITY_CHANGE,当发现网络开启时就触发数据上报。
5、服务器连接,如果你了解java熟悉java企业级开发,那么你对httpclient并不陌生,很幸运的是android sdk已经集成了httpclient,那我们服务器连接首选它了。

以上是我做的解决方案,你是否有更好的替代品,希望我只是抛了块砖头,后面你继续。。。。

service被系统异常kill掉后回重启。有以下值:

onStartCommand有三种返回值:
START_STICKY:sticky的意思是“粘性的”。使用这个返回值时,我们启动的服务跟应用程序”粘”在一起,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务。当再次启动服务时,传入的第一个参数将为null;
START_NOT_STICKY:“非粘性的”。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务。
START_REDELIVER_INTENT:重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。

‘陆’ 如何编写android6.0服务被杀不死

Service简介
Service段定间运行台用户交互应用组件每Service必须manifest 通态州好声明通contect.startservicecontect.bindserverice启其应用组件运行进程主线程说service需要耗或者阻塞操作需要其线程实现(或者用系统提供IntentService继承Service处理数据用自身新线程)【新线程startServiceServiceMainThread】迹猛

本服务 Local Service 用于应用程序内部
启并运行直至停止或自停止种式调用Context.startService()启调用Context.stopService()结束调用Service.stopSelf() 或 Service.stopSelfResult()自停止论调用少startService()需要调用stopService()停止服务
【用于实现应用程序自些耗任务比查询升级信息并占用应用程序比Activity所属线程单线程台执行用户体验比较】

远程服务 Remote Service 用于android系统内部应用程序间
通自定帆铅义并暴露接口进行程序操作客户端建立服务象连接并通连接调用服务连接调用Context.bindService()建立调用 Context.unbindService()关闭客户端绑定至同服务服务没加载bindService()先加载
【其应用程序复用比气预报服务其应用程序需要再写服务调用已即】

‘柒’ Android 守护进程的实现方式

在我们进行应用开发时,会遇到上级的各种需求,其中有一条 刚需: 后台保活 ,更有甚者:

我要我们的应用永远活在用户的手机后台不被杀死 —— 这都 TM 的扯淡

除了系统级别的应用能持续运行,所有三方程序都有被杀死的那一天!当然 QQ/微信/陌陌 等会好一些,因为他们已经深入设备的 心 ;
我们能做的只是通过各种手段尽量让我们的程序在后台运行的时间长一些,或者在被干掉的时候,能够重新站起来,而且这个也不是每次都有效的,也是不能在所有的设备的上都有效的;要做到后台进程保活,我们需要做到两方便:

要实现实现上边所说,通过下边几点来实现,首先我们需要了解下进程的优先级划分:

Process Importance 记录在 ActivityManager.java 类中:

了解进程优先级之后,我们还需要知道一个进程回收机制的东西;这里参考 AngelDevil 在博客园上的一篇文章:

Android 的 Low Memory Killer 基于 Linux 的 OOM 机制,在 Linux 中,内存是以页面为单位分配的,当申请页面分配时如果内存不足会通过以下流程选择bad进程来杀掉从而释放内存:

在 Low Memory Killer 中通过进程的 oom_adj 与占用内存的大小决定要杀死的进程, oom_adj 越小越不容易被杀死;
Low Memory Killer Driver 在用户空间指定了一组内存临界值及与之一一对应的一组 oom_adj 值,当系统剩余内存位于内存临界值中的一个范围内时,如果一个进程的 oom_adj 值大于或等于这个临界值对应的 oom_adj 值就会被杀掉。

下边是表示 Process State (即老版本里的 OOM_ADJ )数值对照表,数值越大,重要性越低,在新版SDK中已经在 android 层去除了小于0的进程状态

Process State (即老版本的 OOM_ADJ )与 Process Importance 对应关系,这个方法也是在 ActivityManager.java 类中,有了这个关系,就知道可以知道我们的应用处于哪个级别,对于我们后边优化有个很好地参考

一般情况下,设备端进程被干掉有一下几种情况

由以上分析,我们可以可以总结出,如果想提高我们应用后台运行时间,就需要提高当前应用进程优先级,来减少被杀死的概率

分析了那么多,现在对Android自身后台进程管理,以及进程的回收也有了一个大致的了解,后边我们要做的就是想尽一切办法去提高应用进程优先级,降低进程被杀的概率;或者是在被杀死后能够重新启动后台守护进程

第一种方式就是利用系统漏洞,使用 startForeground() 将当前进程伪装成前台进程,将进程优先级提高到最高(这里所说的最高是服务所能达到的最高,即1);

这种方式在 7.x 之前都是很好用的,QQ、微信、IReader、Keep 等好多应用都是用的这种方式实现;因为在7.x 以后的设备上,这种伪装前台进程的方式也会显示出来通知栏提醒,这个是取消不掉的,虽然 Google 现在还没有对这种方式加以限制,不过这个已经能够被用户感知到了,这种方式估计也用不了多久了

下边看下实现方式,这边这个 VMDaemonService 就是一个守护进程服务,其中在服务的 onStartCommand() 方法中调用 startForeground() 将服务进程设置为前台进程,当运行在 API18 以下的设备是可以直接设置,API18 以上需要实现一个内部的 Service ,这个内部类实现和外部类同样的操作,然后结束自己;当这个服务启动后就会创建一个定时器去发送广播,当我们的核心服务被干掉后,就由另外的广播接收器去接收我们守护进程发出的广播,然后唤醒我们的核心服务;

当我们启动这个守护进程的时候,就可以使用以下 adb 命令查看当前程序的进程情况(需要 adb shell 进去设备),
为了等下区分进程优先级,我启动了一个普通的后台进程,两外两个一个是我们启动的守护进程,一个是当前程序的核心进程,可以看到除了后台进程外,另外两个进程都带有 isForeground=true 的属性:

然后我们可以用下边的命令查看 ProcessID

有了 ProcessID 之后,我们可以根据这个 ProcessID 获取到当前进程的优先级状态 Process State ,对应 Linux 层的 oom_adj
可以看到当前核心进程的级别为 0 ,因为这个表示当前程序运行在前台 UI 界面,守护进程级别为 1 ,因为我们利用漏洞设置成了前台进程,虽然不可见,但是他的级别也是比较高的,仅次于前台 UI 进程,然后普通后台进程级别为 4 ;当我们退到后台时,可以看到核心进程的级别变为 1 了,这就是因为我们利用 startForeground() 将进程设置成前台进程的原因,这样就降低了进程被系统回收的概率了;

可以看到这种方式确实能够提高进程优先级,但是在一些国产的设备上还是会被杀死的,比我我测试的时候小米点击清空最近运行的应用进程就别干掉了;当把应用加入到设备白名单里就不会被杀死了,微信就是这样,人家直接装上之后就已经在白名单里了,我们要做的就是在用户使用中引导他们将我们的程序设置进白名单,将守护进程和白名单结合起来,这样才能保证我们的应用持续或者

Android系统在5.x以上版本提供了一个 JobSchele 接口,系统会根据自己实现定时去调用改接口传递的进程去实现一些操作,而且这个接口在被强制停止后依然能够正常的启动;不过在一些国产设备上可能无效,比如小米;
下边是 JobServcie 的实现:

我们要做的就是在需要的时候调用 JobSchele 的 schele 来启动任务;剩下的就不需要关心了, JobSchele 会帮我们做好,下边就是我这边实现的启动任务的方法:

在实现 Service 类时,将 onStartCommand() 返回值设置为 START_STICKY ,利用系统机制在 Service 挂掉后自动拉活;不过这种方式只适合比较原生一些的系统,像小米,华为等这些定制化比较高的第三方厂商,他们都已经把这些给限制掉了;

这种方式在以下两种情况无效:

事事没有绝对,万物总有一些漏洞,就算上边的那些方式不可用了,后边肯定还会出现其他的方式;我们不能保证我们的应用不死,但我们可以提高存活率;

其实最好的方式还是把程序做好,让程序本身深入人心,别人喜欢你了,就算你被干掉了,他们也会主动的把你拉起来,然后把你加入他们的白名单,然后我们的目的就实现了不是 😁 ~

‘捌’ 如何让android的service一直在后台运行

首先来说,android是不存在一直运行后台服务的。而且,后天一直运行,就会消耗很大的手机资源的,因此也会影响手机的其他程序的使用的。

需要注意的事,手机系统运行的问题,以上的方法都是建立在手机系统够大的时候才行的。要不就会被很轻易的就清理掉了。

以上就是我的回答,希望可以帮到题主。

阅读全文

与android不死服务相关的资料

热点内容
和电视同步的是什么app 浏览:858
爸爸和女儿在一起的泰国电影 浏览:894
怎么给股票公式加密码 浏览:358
十九减1速算法 浏览:654
男主叫方圆的都市小说 浏览:276
加密货币锁仓量查询 浏览:160
手机双摄算法哪家强 浏览:546
韩国电影演员和男按摩叫什么电影 浏览:229
服务器上如何设置ip地址 浏览:162
云服务器主机怎么购买 浏览:138
中文字幕小电影 浏览:217
绿帽版小说改编 浏览:552
先做后爱狼性总裁夜宠欢 浏览:519
夜里一个人看的视频网站 浏览:736
个人所得税app为什么不分阶梯 浏览:750
怎么在触电新闻APP投放广告 浏览:726
androidant教程 浏览:505
台湾经典动作片有哪些 浏览:578
团鬼六所有电影下载 浏览:665
动车如何退票app 浏览:59