zoukankan      html  css  js  c++  java
  • 8.1.1 Service的生命周期

    2010-06-21 16:57 李宁 中国水利水电出版社 字号:T | T
    一键收藏,随时查看,分享好友!

    《Android/OPhone开发完全讲义》第8章Android服务,本章主要介绍了Android系统 中的服务(Service)技术。Service是Android中4个应用程序组件之一。在Android系统内部提供了很多的系统服务,通过这些系统 服务,可以实现更为复杂的功能,例如,监听来电、重力感应等。本节为大家介绍Service的生命周期。

    AD:

    8.1.1  Service的生命周期

    本节的例子代码所在的工程目录是srcch08ch08_servicelifecycle

    Service与Activity一样,也有一个从启动到销毁的过程,但Service的这个过程比Activity简单得多。Service启动到销毁的过程只会经历如下3个阶段:

    创建服务

    开始服务

    销毁服务

    一个服务实际上是一个继承android.app.Service的类,当服务经历上面3个阶段后,会分别调用Service类中的3个事件方法进行交互,这3个事件方法如下:

    1. public void onCreate();                     //  创建服务  
    2. public void onStart(Intent intent, int startId);            //  开始服务  
    3. public void onDestroy();                        //  销毁服务 

    一个服务只会创建一次,销毁一次,但可以开始多次,因此,onCreate和onDestroy方法只会被调用一次,而onStart方法会被调用多次。

    下面编写一个服务类,具体看一下服务的生命周期由开始到销毁的过程。

    1. package net.blogjava.mobile.service;  
    2.  
    3. import android.app.Service;  
    4. import android.content.Intent;  
    5. import android.os.IBinder;  
    6. import android.util.Log;  
    7.  
    8. //  MyService是一个服务类,该类必须从android.app.Service类继承  
    9. public class MyService extends Service  
    10. {  
    11.     @Override  
    12.     public IBinder onBind(Intent intent)  
    13.     {  
    14.         return null;  
    15.     }  
    16.     //  当服务第1次创建时调用该方法  
    17.     @Override  
    18.     public void onCreate()  
    19.     {  
    20.         Log.d("MyService", "onCreate");  
    21.         super.onCreate();  
    22.     }  
    23.     //  当服务销毁时调用该方法  
    24.     @Override  
    25.     public void onDestroy()  
    26.     {  
    27.         Log.d("MyService", "onDestroy");  
    28.         super.onDestroy();  
    29.     }  
    30.     //  当开始服务时调用该方法  
    31.     @Override  
    32.     public void onStart(Intent intent, int startId)  
    33.     {  
    34.         Log.d("MyService", "onStart");  
    35.         super.onStart(intent, startId);  
    36.     }  

    在MyService中覆盖了Service类中3个生命周期方法,并在这些方法中输出了相应的日志信息,以便更容易地观察事件方法的调用情况。

    读者在编写Android的应用组件时要注意,不管是编写什么组件(例如,Activity、Service等),都需要在 AndroidManifest.xml文件中进行配置。MyService类也不例子。配置这个服务类很简单,只需要在 AndroidManifest.xml文件的<application>标签中添加如下代码即可:

    1. <service android:enabled="true" android:name=".MyService" /> 

    其中android:enabled属性的值为true,表示MyService服务处于激活状态。虽然目前MyService是激活的,但系统仍 然不会启动MyService,要想启动这个服务。必须显式地调用startService方法。如果想停止服务,需要显式地调用stopService 方法,代码如下:

    1. public void onClick(View view)  
    2. {  
    3.     switch (view.getId())  
    4.     {  
    5.         case R.id.btnStartService:  
    6.             startService(serviceIntent);        
      //  单击【Start Service】按钮启动服务  
    7.             break;  
    8.         case R.id.btnStopService:  
    9.             stopService(serviceIntent);     
      //  单击【Stop Service】按钮停止服务  
    10.             break;  
    11.     }  

    其中serviceIntent是一个Intent对象,用于指定MyService服务,创建该对象的代码如下:

    1. serviceIntent = new Intent(this, MyService.class); 

    运行本节的例子后,会显示如图8.1所示的界面。

     
    图8.1  开始和停止服务

    第1次单击【Start Service】按钮后,在DDMS透视图的LogCat视图的Message列会输出如下两行信息:

    1. onCreate  
    2. onStart 

    然后单击【Stop Service】按钮,会在Message列中输出如下信息:

    1. onDestroy 

    下面按如下的单击按钮顺序的重新测试一下本例。

    【Start Service】→【Stop Service】→【Start Service】→【Start Service】→【Start Service】→【Stop Service】

    测试完程序,就会看到如图8.2所示的输出信息。可以看出,只在第1次单击【Start Service】按钮后会调用onCreate方法,如果在未单击【Stop Service】按钮时多次单击【Start Service】按钮,系统只在第1次单击【Start Service】按钮时调用onCreate和onStart方法,再单击该按钮时,系统只会调用onStart方法,而不会再次调用onCreate方 法。

     
    图8.2  服务的生命周期方法的调用情况

    在讨论完服务的生命周期后,再来总结一下创建和开始服务的步骤。创建和开始一个服务需要如下3步:

    (1)编写一个服务类,该类必须从android.app.Service继承。Service类涉及到3个生命周期方法,但这3个方法并不一定在 子类中覆盖,读者可根据不同需求来决定使用哪些生命周期方法。在Service类中有一个onBind方法,该方法是一个抽象方法,在Service的子 类中必须覆盖。这个方法当Activity与Service绑定时被调用(将在8.1.3节详细介绍)。

    (2)在AndroidManifest.xml文件中使用<service>标签来配置服务,一般需要 将<service>标签的android:enabled属性值设为true,并使用android:name属性指定在第1步建立的服务 类名。

    (3)如果要开始一个服务,使用startService方法,停止一个服务要使用stopService方法。

  • 相关阅读:
    java-并发解决方案
    linux-常用快捷键
    java-进程
    vim-常用快捷键
    数据库-事务
    spring-事务实现原理
    gdb
    x86 下的 struct 變數 member 擺放位置
    du 查看 資料夾 佔用空間
    ADC 計算時,階數的選擇
  • 原文地址:https://www.cnblogs.com/xgjblog/p/3927819.html
Copyright © 2011-2022 走看看