android基础 [超级详细android Service组件解析(什么是Service,创建服务的方式,不同创建方式服务的生命周期)]

1 章节目录

2 Service

2.1 Service简介

2.2 如何创建一个Service

2.3 Service构成

2.3 Service启动方式

3 Service的生命周期

3.1 startService启动的生命周期

3.2 bindService启动的生命周期


2 Service

2.1 Service简介

  • Service是Android四大组件之一,它可以在后台执行长时间运行操作而没有用户界面的应用组件。

  • Service的启动方式有两种:startService启动和bindService启动。

注意:服务与其他应用程序对象一样,在其托管进程的主线程中运行。这意味着,如果你的服务要执行任何CPU密集型(例如 MP3 播放)或阻塞(例如网络)操作,它应该在Service中再创建一个子线程,然后在这里去处理耗时操作就没问题了。

2.2 如何创建一个Service

 

 

2.3 Service构成

  • MyService.java

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">package</span> <span style="color:#0000ff">com</span>.<span style="color:#000000">hopu</span>.<span style="color:#000000">demo</span>;
​
<span style="color:#770088">import</span> <span style="color:#000000">android</span>.<span style="color:#000000">app</span>.<span style="color:#000000">Service</span>;
<span style="color:#770088">import</span> <span style="color:#000000">android</span>.<span style="color:#000000">content</span>.<span style="color:#000000">Intent</span>;
<span style="color:#770088">import</span> <span style="color:#000000">android</span>.<span style="color:#000000">os</span>.<span style="color:#000000">IBinder</span>;
​
<span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">MyService</span> <span style="color:#770088">extends</span> <span style="color:#000000">Service</span> {
    <span style="color:#770088">public</span> <span style="color:#000000">MyService</span>() {
    }
​
    <span style="color:#555555">@Override</span>
    <span style="color:#770088">public</span> <span style="color:#000000">IBinder</span> <span style="color:#000000">onBind</span>(<span style="color:#000000">Intent</span> <span style="color:#000000">intent</span>) {
        <span style="color:#aa5500">// TODO: Return the communication channel to the service.</span>
        <span style="color:#770088">throw</span> <span style="color:#770088">new</span> <span style="color:#000000">UnsupportedOperationException</span>(<span style="color:#aa1111">"Not yet implemented"</span>);
    }
}</span></span>
  • AndroidManifest.xml

<span style="background-color:#f8f8f8"><span style="color:#333333">    <span style="color:#117700"><</span><span style="color:#117700">application</span>
        <span style="color:#0000cc">...</span><span style="color:#117700">></span>
        <span style="color:#117700"><</span><span style="color:#117700">service</span>
            <span style="color:#0000cc">android:name</span>=<span style="color:#aa1111">".MyService"</span>
            <span style="color:#0000cc">android:enabled</span>=<span style="color:#aa1111">"true"</span>
            <span style="color:#0000cc">android:exported</span>=<span style="color:#aa1111">"true"</span><span style="color:#117700">></</span><span style="color:#117700">service</span><span style="color:#117700">></span>
​
        <span style="color:#117700"><</span><span style="color:#117700">activity</span>
            <span style="color:#0000cc">android:name</span>=<span style="color:#aa1111">".MainActivity"</span>
            <span style="color:#0000cc">android:exported</span>=<span style="color:#aa1111">"true"</span><span style="color:#117700">></span>
            <span style="color:#117700"><</span><span style="color:#117700">intent-filter</span><span style="color:#117700">></span>
                <span style="color:#117700"><</span><span style="color:#117700">action</span> <span style="color:#0000cc">android:name</span>=<span style="color:#aa1111">"android.intent.action.MAIN"</span> <span style="color:#117700">/></span>
​
                <span style="color:#117700"><</span><span style="color:#117700">category</span> <span style="color:#0000cc">android:name</span>=<span style="color:#aa1111">"android.intent.category.LAUNCHER"</span> <span style="color:#117700">/></span>
            <span style="color:#117700"></</span><span style="color:#117700">intent-filter</span><span style="color:#117700">></span>
        <span style="color:#117700"></</span><span style="color:#117700">activity</span><span style="color:#117700">></span>
    <span style="color:#117700"></</span><span style="color:#117700">application</span><span style="color:#117700">></span>  </span></span>

2.3 Service启动方式

1. startService

  • 启动Service

    显式启动通过类名称来启动,需要在Intent中指明Service所在的类,并调用startService (lntent)启动service,显式启动代码如下:

    <span style="background-color:#f8f8f8"><span style="color:#000000">Intent</span> <span style="color:#000000">intentStart</span> <span style="color:#981a1a">=</span> <span style="color:#770088">new</span> <span style="color:#000000">Intent</span>(<span style="color:#000000">ServiceActivity</span>.<span style="color:#770088">this</span>, <span style="color:#000000">StartService</span>.<span style="color:#770088">class</span>);
    <span style="color:#000000">startService</span>(<span style="color:#000000">intentStart</span>);</span>

在上面的代码中,Intent指明了启动的Service所在类为StartService。

通过该方式启动Service,访问者与Service之间没有关联,即使访问者退出了,Service也仍然运行。

  • 停止service

    显式启动停止Service,需要将启动Service的Intent传递给stopService (Intent)函数,代码如下:

    <span style="background-color:#f8f8f8">stopService(intentStart);</span>

    因Android5.0开始,Google要求必须使用显示Intent启动Service,所以隐式启动咱就不介绍了。

  • 样例:

    1. 创建StartService.java继承自Service类,重写onCreate()方法、onStartCommand()方法、onBind()方法、onDestroy()方法,其代码如下:

      <span style="background-color:#f8f8f8"><span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">StartService</span> <span style="color:#770088">extends</span> <span style="color:#000000">Service</span> {
          <span style="color:#555555">@Override</span>
          <span style="color:#770088">public</span> <span style="color:#008855">void</span> <span style="color:#000000">onCreate</span>() {
              <span style="color:#770088">super</span>.<span style="color:#000000">onCreate</span>();
              <span style="color:#000000">Log</span>.<span style="color:#000000">e</span>(<span style="color:#000000">getClass</span>().<span style="color:#000000">getName</span>(), <span style="color:#aa1111">"onCreate"</span>);
          }
          <span style="color:#555555">@Override</span>
          <span style="color:#770088">public</span> <span style="color:#008855">int</span> <span style="color:#000000">onStartCommand</span>(<span style="color:#000000">Intent</span> <span style="color:#000000">intent</span>, <span style="color:#008855">int</span> <span style="color:#000000">flags</span>, <span style="color:#008855">int</span> <span style="color:#000000">startId</span>) {
              <span style="color:#000000">Log</span>.<span style="color:#000000">e</span>(<span style="color:#000000">getClass</span>().<span style="color:#000000">getName</span>(), <span style="color:#aa1111">"onStartCommand"</span>);
              <span style="color:#770088">return</span> <span style="color:#770088">super</span>.<span style="color:#000000">onStartCommand</span>(<span styl
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值