【Android】开机自启动Service

来源:互联网 发布:农业大数据应用 编辑:程序博客网 时间:2024/05/01 18:49

之前我们有篇关于介绍 Android 如何实现开机自启动,不过都写的是关于如何启动 Activity,本篇文章将介绍如何启动 Service。

先附上之前文章的链接,以便参考:【Android】开机自启动。


Service 的启动相比 Acitivty 而言较为繁琐,其实都是通过别的类去调用被启动类,只不过可能 Activity 大家更为熟悉,Service 比较陌生吧。

不了解 Android Service 的童鞋可以先参考下【Android】Service 生命周期 和 【Android】Service学习之本地服务 两篇文章。



下面回到正题,看看 Service 是如何实现自启动的。


和自启动 Activity 一样,我们也先需要静态注册一个广播。

随后,创建一个继承于 BroadcastReveiver 的启动类。

[java] view plaincopy
  1. context.startService(new Intent("cn.etzmico.Etzmico_AutoRunService")); // 调用 Service  
调用/启动一个 Service 比 启动一个 Activity 要容易的多。intent中的参数是一个“标签”,详情下面的内容会介绍到。


在 Manifest.xml 静态注册。

[java] view plaincopy
  1. <receiver android:name="cn.etzmico.autorunservice.BootReceiver" >  
  2.            <intent-filter >  
  3.                <action android:name="android.intent.action.BOOT_COMPLETED" />  
  4.   
  5.                <category android:name="android.intent.category.LAUNCHER" />  
  6.            </intent-filter>  
  7.        </receiver>  

同样,需要加入权限。

[java] view plaincopy
  1. <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" >  
  2.    </uses-permission>  


下面就来看 Service 了。


创建一个继承于 Service 的类。为了验证,我们可以在 onCreate() 方法中,打印一句话。


这里简单的说下 Service 的生命周期。

Service 也有生命周期,也有 onCrate() 等……不过 Service 还有 onStart() 和 onBind() 。

onCreate() 和 onStart() 的区别是:

    onCreate() 只有在首次调用 Service 时调用。

    onStart()每次调用 Service 时均调用,首次调用 Service 时也不例外。

    onBind() 在bindService() 时调用(本文不涉及)。

因此我们可以根据自己所需要的,在 onCreate() , onStart() 以及 onBind() 中写入方法。



另外,Service 也是需要声明的。

我们都知道,当新建 Activity 的时候,我们需要在 Manifest.xml 中声明, Service 亦然如此,不过 Service 与之不同的是,每个 Service 都需要添加一个“标签”,这个标签在一个工程中要是唯一的,用于让系统知道我们需要调用的是哪个 Service。

[java] view plaincopy
  1. <service android:name="cn.etzmico.autorunservice.Etzmico_AutoRunService" >  
  2.            <intent-filter >  
  3.                <action android:name="cn.etzmico.Etzmico_AutoRunService" />  
  4.   
  5.                <category android:name="android.intent.category.default" />  
  6.            </intent-filter>  
  7.        </service>  

intent-filter 的 actiong android:name 中的内容就是“标签”了。如果我们想启动的是这个 Service,那么在广播类中 startService() 方法中 intent 的参数就是这个“标签”;否则启动服务时会提示new Intent找不到"cn.etzmico.Etzmico_AutoRunService"(引号中具体内容视当时情况而定,即 startService() 时 intent 的参数)。




工程资源:http://download.csdn.net/detail/etzmico/4110913

0 0
原创粉丝点击