android打不死的小强——永不磨灭的Servicr

笔者在这里就不多说了,因为一般人们都不喜欢这样的东西,尤其是有洁癖的人更是如此,总是喜欢时不时的杀进程杀服务,可是由于android开源的特殊性,你会发现被干掉的服务又一次的重新复活了,总之生命力极其强悍,业界称之为——打不死的小强。

对于用户也许这个小强很是讨厌,可是对于开发者来说,由于需求,不得不做一个小强(是不是说俺们程序猿也是很讨厌啊。。呜呜。。)

废话不多说,小强的做法有很多种,像主流的微信、QQ等都是启动两个服务,两个服务之间相互监听,一个被干掉,另外一个会立即启动被干掉的这个,由于服务在Android的“地位”最高,所以服务中的监听会优先执行。这就是QQ、微信的做法。

在这里我用的是自己的做法,做法与他们原理相同,不过我是设置了一个定时器,如果服务被干掉,服务会在指定的时间后重启。这个时间你来定,是不是很爽啊,要是定的时间很小,哈哈,恭喜你,你制作了一个病毒大笑,由于服务会一直启动,会使你的机子卡死。。。。。。

首先,自己做一个Service

public class MyService extends Service {
	/**
	 * 定时器
	 */
	private AlarmManager mAlarmManager = null;
	private PendingIntent mPendingIntent = null;

	@Override
	public void onCreate() {
		Intent intent = new Intent(getApplicationContext(), MyService.class);
		mPendingIntent = PendingIntent.getService(this, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK);
		// 服务创建时时间
		long now = System.currentTimeMillis();
		// 定时器多久后启动
		long later = 60000;
		mAlarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
		// RTC 在指定的时刻,发送广播,但不唤醒设备
		// RTC_WAKEUP 在指定的时刻,发送广播,并唤醒设备
		mAlarmManager.setInexactRepeating(AlarmManager.RTC, now, later, mPendingIntent);
		super.onCreate();
	}

	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		Toast.makeText(getApplicationContext(), "Callback Successed!", Toast.LENGTH_LONG).show();
		return START_STICKY;
	}

	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}

	@Override
	public void onDestroy() {
		super.onDestroy();
	}
}

咱们再实现一个功能,让这个服务在开机的时候启动,代码如下,注册一个广播事件,监听系统的Intent.ACTION_BOOT_COMPLETED

public class MyBroadcastReceiver extends BroadcastReceiver {
	@Override
	public void onReceive(Context context, Intent intent) {
		//开机启动
		if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
			Intent startServiceIntent = new Intent(context, MyService.class);
			startServiceIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
			context.startService(startServiceIntent);
		}
	}
}
接下来,在咱们的清单文件上加上这个服务和广播

<span style="white-space:pre">	</span><service
            android:name="com.xiaoqiang.service.MyService"
            android:enabled="true"
            android:process=":remote" >
        </service>

        <receiver android:name="com.xiaoqiang.service.MyBroadcastReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />

                <category android:name="android.intent.category.HOME" />
            </intent-filter>
        </receiver>

最后,在自己的程序中启动就OK啦,好了小强制作完成

代码0分下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值