杀不死的Service

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

2013年11月6日作者:cstriker1407

暂无评论

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

github:

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

Contents [hide]

  • 1 这次先备注下思路:

  • 2 Service代码:

  • 3  XML文件:

  • 4 开机自动启动Service:

  • 5  XML代码:

  • 6  备注:

    • 6.1 相关

这次先备注下思路:

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的自动启动有很多讨论,另外有篇文章可以【 参考 】。

你可能感兴趣的:(杀不死的Service)