好记性不如铅笔头

android, 编程

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

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

github:

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

CONTENTS

这次先备注下思路:

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

发表评论

2 + 11 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据