文档章节

杀不死的Service

Jonson
 Jonson
发布于 2015/05/27 20:04
字数 440
阅读 307
收藏 24

Android应用开发笔记:杀不死的Service

2013年11月6日作者:cstriker1407

暂无评论

有时候我们希望我们程序中的Service不被杀死,即使杀死也能自动重启。下面简单的备忘下一种思路。

github:

 https://github.com/cstriker1407/android/tree/master/UnkillService 】

Contents [hide]

这次先备注下思路:

1)经过测试,QQ安全管家和android系统附带的进程工具无法杀死我们的Service,但是360可以完全杀死。

2)本思路的核心思想是启用一个AlarmManager,通过AlarmManager定时启动来实现android的Service不被杀死。

3)Service运行在独立的进程中。

Service代码:

public class TargetService extends Service
{
    private static final String tag = "TargetService"
    @Override
    public IBinder onBind(Intent arg0)
    {
        return null;
    }  
    @Override
    public void onCreate()
    {
        Log.e(tag, "onCreate callded");
        AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
        //包装需要执行Service的Intent
        Intent intent = new Intent(this, this.getClass());
        PendingIntent pendingIntent = PendingIntent.getService(this, 0,
                intent, PendingIntent.FLAG_UPDATE_CURRENT);
        //触发服务的起始时间
        long triggerAtTime = SystemClock.elapsedRealtime();
        //使用AlarmManger的setRepeating方法设置定期执行的时间间隔(seconds秒)和需要执行的Service
        manager.setRepeating(AlarmManager.ELAPSED_REALTIME, triggerAtTime, 3 * 1000, pendingIntent);
        super.onCreate();
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {
        Log.e(tag, "onStartCommand called");
        return START_STICKY;
    }
    @Override
    public void onDestroy()
    {
        Log.e(tag, "onDestroy callded");
        super.onDestroy();
    }
}

 XML文件:

<service
    android:name="TargetService"
    android:process=":remotetargetservice" >
</service>

 android:process前面增加:,表明它运行在自己的进程里,需要通过【 AIDL 】来进行通讯。

开机自动启动Service:

public class BootReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        context.startService(new Intent(context, TargetService.class));
    }
}

 XML代码:

<receiver android:name="BootReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</receiver>

 备注:

1)关于Service的自动启动有很多讨论,另外有篇文章可以【 参考 】。

本文转载自:http://cstriker1407.info/blog/android-application-development-notes-you-cant-kill-a-service/

共有 人打赏支持
Jonson
粉丝 21
博文 131
码字总数 17942
作品 0
肇庆
私信 提问
加载中

评论(2)

Jonson
Jonson

引用来自“李珍珍”的评论

碰到这种应用直接卸载[18][18][18]
用来面试的..
Le_Guto
Le_Guto
碰到这种应用直接卸载[18][18][18]
centos6.7 jps 下的进程,kill -9 杀不死,咋整?

centos6.7 jps 下的进程,kill -9 杀不死,咋整?

知行合一1
2017/02/23
380
1
关于 Android 进程保活,你所需要知道的一切

早前,我在知乎上回答了这样一个问题:怎么让 Android 程序一直后台运行,像 QQ 一样不被杀死?。关于 Android 平台的进程保活这一块,想必是所有 Android 开发者瞩目的内容之一。你到网上搜...

oschina
2016/04/21
10.4K
36
杀不死的service 开机自启

activity: public class MainActivity extends Activity { private Button startButton = null; private Button stopButton = null; private Intent intent = null; @Override protected vo......

恒源祥
2016/09/28
17
0
android中怎么实现一键清理内存的功能

android中怎么实现类似于LBE安全大师那样的一键清理功能,能够把进程杀死。用killBackgroundProcesses和restartPackage有些进程杀不死。求解

林彩神
2013/02/25
2.3K
1
Apache 跟 MySQL 无法关闭或启动

每次电脑重启的时候,apache跟mysql是启动,服务状态的,在这基础上使用命令行stop 此時就出现stopping, 并且程序一直在,杀进程什么的都杀不死,只能重启电脑。 有没有同行碰到类似的问题,...

zhangbo5
07/25
97
2

没有更多内容

加载失败,请刷新页面

加载更多

tomcat编译超过64k大小的jsp文件报错原因

  今天遇到一个问题,首先是在tomcat中间件上跑的web项目,一个jsp文件,因为代码行数实在是太多了,更新了几个版本之后编译报错了,页面打开都是报500的错误,500的报错,知道http协议返回...

SEOwhywhy
20分钟前
0
0
flutter http 请求客户端

1、pubspec文件管理Flutter应用程序的assets(资源,如图片、package等)。 在pubspec.yaml中,通过网址“https://pub.dartlang.org/packages/http#-installing-tab-”确认版本号后,将http(0...

渣渣曦
20分钟前
0
0
Django基本命令及moduls举例

一、Django基本命令 1.创建项目 django-admin.py startproject mysite 创建后的项目结构:- mysite - mysite #对整个程序进行配置 - init #导入包专用- settings ...

枫叶云
35分钟前
6
0
zabbix安装

rpm -ivh http://repo.webtatic.com/yum/el6/latest.rpm 安装jdk rpm -ivh (自行在网上下载rpm包) 安装php并修改相应参数 yum -y install php56w php56w-gd php56w-mysqlnd php56w-bcmath......

muoushi
36分钟前
4
0
MySQL自增属性auto_increment_increment和auto_increment_offset

MySQL的系统变量或会话变量auto_increment_increment(自增步长)和auto_increment_offset(自增偏移量)控制着数据表的自增列ID。 mysql> show tables;Empty set (0.00 sec)mysql> CREATE TA......

野雪球
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部