文档章节

杀不死的Service

Jonson
 Jonson
发布于 2015/05/27 20:04
字数 440
阅读 330
收藏 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
博文 136
码字总数 20894
作品 0
肇庆
私信 提问
加载中

评论(2)

Jonson
Jonson 博主

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

碰到这种应用直接卸载[18][18][18]
用来面试的..
Le_Guto
Le_Guto
碰到这种应用直接卸载[18][18][18]
【Android开发坑系列】如何让Service尽可能存活

流行的思路如下【2015-11-20更新】: 1.让Service杀不死。Service的onStartCommand返回START_STICKY,同时onDestroy里面调用startService启动自身。 2.让Service从后台变成前置。在Android 2...

Kai.Ma
2015/09/06
0
0
mysql5.7.22在centos7.5下的安装

1、下载,解压 把下载的文件放到 /app/programs/目录下 tar -zxvf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz 地址:https://dev.mysql.com/downloads/mysql/ 2、建目录 /usr/local/mysql......

osc_cyiu3qx7
2018/06/28
1
0
centos6.7 jps 下的进程,kill -9 杀不死,咋整?

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

知行合一1
2017/02/23
1.3K
1
DroidPlugin手札——home键强杀处理

DroidPlugin手札——home键强杀处理 DroidPlugin是360开源的插件化框架,github地址为:github.com/DroidPlugin…。 因公司业务及项目历史原因,来公司的这段时间一直在使用DroidPlugin进行业...

GitLqr
2019/01/21
0
0
android中怎么实现一键清理内存的功能

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

林彩神
2013/02/25
2.4K
1

没有更多内容

加载失败,请刷新页面

加载更多

mysql 基准测试

osc_boe54hqe
11分钟前
9
0
tr 简单使用

tr 替换 1.用来计算求和 [root@room4pc09 桌面]# seq 1 100 |echo "$[`tr "\n" "+"` 0]" 5050 4pc09 桌面]# seq 1 2 100 |echo "$[`tr "\n" "+"` 0]" 2500 [root@room4pc09 桌面]# seq 0 2 ......

osc_a9optwdf
15分钟前
4
0
磁盘调度策略

在mysql 服务器上,用cfq 的话不合适的,在负载下cfq 会在队列中插入一些不必要请求,会导致很差的响应时间

osc_5rgbamh9
15分钟前
5
0
海思Hi3516A(4)HDR模式开发

1. HDR概述 HDR(High-Dynamic Range)算法根据不同曝光的图片,合成最终HDR图片,比一般图片具有更宽的动态范围和图像细节。 一般HDR算法有两种:一种是基于不同曝光时间的连续几幅图片合现,...

osc_c0usoa3v
16分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部