Android应用进程防杀死

应用进程分为五个等级:
1.前台进程:Foreground process

1).用户正在交互的activity( onResume() );
2).当某个Service绑定正在交互的Activity;
3).被主动调用为前台Service(startForeground());
4).组件正在执行生命周期的回调(onCreate()/onStart/onDestroy);

2.可见进程:Visible process

我们的Activity出于onPause()(没有进入onStop());

3.服务进程:Service process

简单的startService();

4.后台进程:Background process

对用户没有直接影响的进程,Activity出于onStop()的时候;

5.空进程:Empty process

不包含任何的活动的组件.(Android设计的,为了第二次启动更快,采取了一起权衡);

可行的防应用杀死技术:

1、白名单;
2、双进程守护;
3、JobScheduler把任务加到系统调度队列中,当达到任务窗口期的时候就会执行,然后在任务里面启动进程;
4、监听系统级广播,然后把自己启动;
5、NDK来解决,Native进程来完成双进程守护;

双进程服务在Java层的实现:

1、作为前台进程,提升了优先级;(应用在后台运行的时候,另起一个一像素的页面,覆盖在桌面上,将这个"后台进程"变为前台进程)
2、防止用户在设置界面杀死某个进程服务和停止应用;
3、防止手机优化软件杀死进程;

JobScheduler的作用:

1)、固定周期唤醒;
2)、充电唤醒;
3)、设备空闲时唤醒;
4)、免费网络连接时唤醒;

利用JobScheduler重启服务:

1)、Android系统5.0后提供了JobScheduler来重新启动服务;
2)、Android系统5.0之前可以使用AlarmManager来代替;

开发步骤:
1)、重写JobService的startJob()和stopJob():

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public class MyJobService extends JobService {

        @Override
        public boolean onStartJob(JobParameters params) {
                 startService(new Intent(this,MyService.class));
                return false;
        }

        // 如果确定停止系统调度作业,即使调度作业可能被完成,将调用此方法
        @Override
        public boolean onStopJob(JobParameters params) {
                startService(new Intent(this,MyService.class));
                return false;
        }

        @Override
        public void onTaskRemoved(Intent rootIntent) {
                 startService(new Intent(this,MyService.class));
        }
}

2)、绑定JobService:

public class MyServiceextends Service {
      
        @Override
        public void onCreate() {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                        JobScheduler jobScheduler = (JobScheduler)getSystemService(JOB_SCHEDULER_SERVICE);
                       JobInfo.Builder builder = new JobInfo.Builder(1, new ComponentName(this, MyService.class));  
                        builder.setMinimumLatency(TimeUnit.MILLISECONDS.toMillis(10)); //执行的最小延迟时间
                        builder.setOverrideDeadline(TimeUnit.MILLISECONDS.toMillis(15));  //执行的最长延时时间
                        builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_NOT_ROAMING);  //非漫游网络状态
                        builder.setBackoffCriteria(TimeUnit.MINUTES.toMillis(10),  JobInfo.BACKOFF_POLICY_LINEAR);  //线性重试方案
                        builder.setRequiresCharging(false); // 未充电状态
                        jobScheduler.schedule(builder.build());
                } else {
                        PendingIntent pendingIntent = PendingIntent.getService(this, 0, getIntentAlarm(this), PendingIntent.FLAG_UPDATE_CURRENT);
                        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
                        alarmManager.cancel(pendingIntent);
                        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + KEEP_ALIVE_INTERVAL, KEEP_ALIVE_INTERVAL, pendingIntent);
                }
        }
        @Override
        public void onDestroy() {
                super.onDestroy();
        }

        @Override
        public void onLowMemory() {
                super.onLowMemory();
        }

        @Override
        public IBinder onBind(Intent arg0) {
                return null;
        }
}

3)、在AndroidManifest注册服务:

如果Service等的AndroidManifest中声明为android:exported="false" , 则该服务不能够跨进程使用;

4、声明权限:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

结合Netty框架,实现socket长连接
Android--Netty的理解和使用 : https://www.jianshu.com/p/7399b52a5ab2

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 如何能让我们的应用能够在系统后台持续地运行是一个自Android从娘胎里出来时就议论不停的话题,而且这似乎成了一个...
    骏骏的简书阅读 1,132评论 1 19
  • 如何进行进程保活,首先我们应该先分析一下进程被杀死的原因开始 Android进程被杀死的场景分析: 从 Andro...
    编程小猪阅读 3,600评论 1 14
  • 作者:腾讯——张兴华目前市面上的应用,貌似除了微信和手Q都会比较担心被用户或者系统(厂商)杀死问题。本文对 And...
    yoosir阅读 1,013评论 0 4
  • 转载一篇不错的文章,解决了我一下关于如何保留android进程的技术。 Android 进程保活 目前市面上的应用...
    小帝Ele阅读 1,036评论 0 6
  • 让一切悄无声息 包括回忆 让一切沉没下去 沉在水底 世界只剩宁静一隅里,你疲惫的思绪 伴随着涤荡心灵的魂曲 演...
    疯王酱阅读 479评论 0 0