杀不死的Service

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(thisthis.getClass());
        PendingIntent pendingIntent = PendingIntent.getService(this0,
                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的自动启动有很多讨论,另外有篇文章可以【 参考 】。

转载于:https://my.oschina.net/janson2013/blog/420741

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值