`

android双进程守护

 
阅读更多

双进程守护

 

一个应用,拥有两个进程

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;
}

 

 

 

分享到:
评论

相关推荐

    android双进程守护,很难被杀死

    "android双进程守护"是一种策略,通过在两个不同的进程中启动服务,提高服务的生存能力,使其更难被系统自动杀死。 首先,了解Android服务(Service)的基本概念。Service是Android四大组件之一,用于在后台执行长...

    Android 双进程守护

    1.实现双进程守护,2,系统清理还是会被杀死,想QQ、微信、他们这些已经被厂家加入白名单了,除非你也去向厂家申明添加白名单(你要有本事哦),3第三方清理软件,像350安全卫士这样的清理软件表面上杀死了,但是...

    Android双进程守护

    通过定义一个LocalService和RemoteService并且相互绑定,当某个服务即将断开连接的时候启动另外一个服务,并将自己和另外一个服务绑定。为了保险,另外定义一个Jobservice,并在适当时机启动LocalService和Remote...

    Android双进程守护Dnprocessmul.rar

    这个压缩包"Android双进程守护Dnprocessmul.rar"可能包含了一个实现这种模式的示例代码。下面我们将详细探讨Android双进程守护的相关知识点。 1. **进程的概念**:在Android系统中,每个应用程序都运行在自己的进程...

    Android双进程守护不会被杀死

    标题"Android双进程守护不会被杀死"指的是在Android平台上,通过设计一种特殊的机制,确保即使在系统资源紧张的情况下,关键服务也可以保持活跃。这种机制涉及到Android进程生命周期的理解、Service的使用以及跨进程...

    android双进程守护,进程很难被杀死demo

    总结来说,Android双进程守护是一种提高服务稳定性的策略,通过创建两个相互关联的进程,确保即使一个被杀死,另一个也能及时恢复。然而,这并不意味着应用可以无视系统规则无限占用资源,开发者仍需遵循最佳实践,...

    android双进程守护 消息推送

    总结来说,"android双进程守护 消息推送"是Android开发中为了确保消息推送服务稳定运行的重要技术,通过创建独立的服务进程和监控主进程状态,保证了即使在主进程被销毁的情况下,依然能接收到推送消息,这对于实时...

    【Android 进程保活】应用进程拉活 ( 双进程守护保活 ) 修改.zip

    【Android 进程保活】应用进程拉活 ( 双进程守护保活 ) https://hanshuliang.blog.csdn.net/article/details/115604667 博客源码快照

    安卓双进程守护

    这种技术被称为“双进程守护”,它涉及到安卓系统的进程管理、服务生命周期以及跨进程通信等核心概念。 首先,我们需要理解安卓进程的生命周期。安卓系统会根据内存压力自动管理和终止进程,优先级较低的进程可能会...

    Android实现双进程守护源码

    本源码是根据http://blog.csdn.net/ztemt_sw2/article/details/27101681中整理出来,源码在Android studio 1.5上已编译通过,能正常运行。

    Android 双进程守护service

    它是利用系统的漏洞来启动一个前台的Service进程,与普通的启动方式区别在于,它不会在系统通知栏处出现一个Notification,看起来就如同运行着一个后台Service进程一样。这样做带来的好处就是,用户无法察觉到你运行...

    Android双进程守护源码

    本源码是根据http://blog.csdn.net/ztemt_sw2/article/details/27101681中整理出来,源码在Android studio 1.5上已编译通过,能正常运行。

    Android实现双进程守护

    在Android系统中,"双进程守护"是一种设计模式,用于确保关键服务即使在主应用程序被关闭或者设备重启后也能持续运行。这种技术的核心是利用Android的Service组件,并将其部署在两个不同的进程中,以提高服务的稳定...

    Android实现双进程守护,如何保证Service不被Kill

    Android实现双进程守护,如何保证Service不被Kill,onStartCommand方法,返回START_STICKY,手动返回START_STICKY,亲测当service因内存不足被kill,当内存又有的时候,service又被重新创建,比较不错,但是不能保证...

    探讨一种新型的双进程守护应用保活方法(单进程守护Demo)

    本文将深入探讨一种新型的双进程守护应用保活方法,并通过提供的"单进程守护DEMO"进行详细阐述。 首先,我们要理解"常驻内存"的概念。常驻内存是指程序在启动后,即使用户将其后台化或关闭,仍然保持在内存中运行,...

    探讨一种新型的双进程守护应用保活方法(双进程守护Demo)

    本篇文章将深入探讨一种新型的双进程守护应用保活方法,该方法通过创建两个独立的进程来确保应用即使在主进程被系统清理后仍能维持基本功能。 首先,我们需要理解“双进程守护”这一概念。在Android中,一个应用...

    【Android 进程保活】应用进程拉活 ( 双进程守护 + JobScheduler 保活 ).zip

    【Android 进程保活】应用进程拉活 ( 双进程守护 + JobScheduler 保活 | 成功率最高 | 推荐使用 ) https://hanshuliang.blog.csdn.net/article/details/115607584 博客源码快照

Global site tag (gtag.js) - Google Analytics