双进程守护
一个应用,拥有两个进程
RemoteService
LocalService
重要代码
public void onCreate(){ //这里必须判断,否则会出现内存溢出 if(localBinder != null){ localBinder = new LocalServiceBinder(); } localServiceConnection = new LocalServiceConnection(); } public int onStartCommand(Intent intent,int flags,int startId){ startTimer(); Notification.Builder builder = new Notification.Builder(this); builder.setDefaults(NotificationCompat.DEFAULT_SOUND); builder.setContentTitle(""); builder.setSmallICon(R.mipmap....); builser.setContentInfo("info"); builder.setWhen(System.currentTimeMillis()); PendingIntent pi = PendingIntent.getActivity(this,0,intent,0); builder.setContentIntent(pi); startForeground(startId,builder,build); return START_STICKY; } class LocalServiceConnection implements ServiceConnection(){ public void onServiceConnected(ComponentName name,IBinder service){ } public void onSerivceDisConnected(CompoentName name){ LocalService.this.startService(new Intent(RemoteService));//启动远程服务 LocalService.this.bindService(new Intent(RemoteService)) //绑定远程服务 } }
每个Sercie中都存在Connection,
思路:
进程A 进程B
进程A被杀死时,启动进程B
进程B被杀死时,启动进程A
使用JobService&JobSceduler
思路:
1.获取应用中的JobSceduler
2.通过JobSceduler来启动LocalService和RemoteService
步骤:
MainActivity.java
1、启动LocalService
2、启动RemoteService
3、启动JobHandlerService,它继承Jobservice
private void scheduleJob(JobInfo job){ JobScheduler js = (JobScheduler)getSystemService(JOB_SCHEDULER_SERVICE); js.schedule(job); } public int OnStartCommand(Intent intent,int flags,int startId){ scheduleJob(getJobInfo()); return START_NOT_START; } public JobInfo getJobInfo(){ JobInfo.Builder builder = new JobInfo.Builder(jobId,new CompoentName)(this,JobHandlerService.class); builder.setPersisted(true); builder.setPeriodic(100); builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY); builder.setRequiresCharging(false); builder.setRequiresDeviceIdle(false); return builder.build(); } public boolean onStartJob(JobParameters params){ boolean isLocalServiceWorking = isServiceWork(this,"com.yourLocalservice.LocalService" boolean isLocalServiceWorking = isServiceWork(this,"com.yourLocalservice.RemoteService"); this.startService(new Intent(this,LocalService.class)); this.startService(new Intent(this,RemoteService.class)); return true;//注意这里 } public boolean onStopJob(JobParameters params){ scheduleJob(getJobInfo); return true;//注意这里 } public boolean isServiceWork(Context context,String serviceName){ ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningServiceInfo> list = manager.getRunningService(128); if(list.size()<0){ return false; } for(int i=0;i< list.size();i++){ String name = list.get(i).service.getClassName().toString(); if(serviceName.equal(name)){ return true; } } return false; }
相关推荐
1.实现双进程守护,2,系统清理还是会被杀死,想QQ、微信、他们这些已经被厂家加入白名单了,除非你也去向厂家申明添加白名单(你要有本事哦),3第三方清理软件,像350安全卫士这样的清理软件表面上杀死了,但是...
android双进程守护,进程很难被杀死demo
通过定义一个LocalService和RemoteService并且相互绑定,当某个服务即将断开连接的时候启动另外一个服务,并将自己和另外一个服务绑定。为了保险,另外定义一个Jobservice,并在适当时机启动LocalService和Remote...
【Android 进程保活】应用进程拉活 ( 双进程守护保活 ) https://hanshuliang.blog.csdn.net/article/details/115604667 博客源码快照
android双进程守护,进程很难被杀死
Android双进程守护程序, 不会被杀死
主要介绍了Android 双进程守护的实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Android双进程守护Dnprocessmul.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
本源码是根据http://blog.csdn.net/ztemt_sw2/article/details/27101681中整理出来,源码在Android studio 1.5上已编译通过,能正常运行。
实现安卓的双进程守护,该功能只限学术研究,如果应用于自己的程序,请三思而后行!
本代码就是传说中的双进程守护,常用于消息推送,如移动,QQ,微信,微博中都用到这种技术,收藏了这里,怕哪天不小心弄丢了。
它是利用系统的漏洞来启动一个前台的Service进程,与普通的启动方式区别在于,它不会在系统通知栏处出现一个Notification,看起来就如同运行着一个后台Service进程一样。这样做带来的好处就是,用户无法察觉到你运行...
本源码是根据http://blog.csdn.net/ztemt_sw2/article/details/27101681中整理出来,源码在Android studio 1.5上已编译通过,能正常运行。
Android实现双进程守护,如何保证Service不被Kill,onStartCommand方法,返回START_STICKY,手动返回START_STICKY,亲测当service因内存不足被kill,当内存又有的时候,service又被重新创建,比较不错,但是不能保证...
【Android 进程保活】应用进程拉活 ( 双进程守护 + JobScheduler 保活 | 成功率最高 | 推荐使用 ) https://hanshuliang.blog.csdn.net/article/details/115607584 博客源码快照
详见http://blog.csdn.net/huaxun66/article/details/53158162
博文:http://blog.csdn.net/andrexpert/article/details/53485360,单进程守护DEMO
Android杀不死的进程ForkNDK示例,双进程守护