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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352

推荐阅读更多精彩内容

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