万书网 > 文学作品 > Android从入门到精通 > 第149页

第149页



这两条路径并非完全独立,即开发人员可以绑定已经使用startService()方法启动的服务。例如,后台音乐服务能使用包含音乐信息的Intent通过调用startService()方法启动。当用户需要控制播放器或者获得当前音乐信息时,可以调用bindService()方法绑定Activity到服务。此时,stopService()和stopSelf()方法直到全部客户端解绑定时才能停止服务。图13.10演示了两类服务的生命周期。



图13.10 服务的生命周期





13.5 经典范例

13.5.1 视力保护程序

例13.5  在Eclipse中创建Android项目,名称为13.5,当应用程序运行1分钟后,显示提示信息,提醒用户保护视力。(实例位置:光盘\TM\sl\13\13.5)

(1)修改res\layout目录中的main.xml文件,定义应用程序的背景图片和一个文本框,代码如下:








android:layout_width="fill_parent"



android:layout_height="fill_parent"



android:background="@drawable/background"



android:orientation="vertical"  >






android:id="@+id/textView"



android:layout_width="fill_parent"



android:layout_height="wrap_content"



android:gravity="center"



android:text="@string/activity_title"



android:textColor="@android:color/black"



android:textSize="25dp"  />





(2)在com.mingrisoft包中,定义TimeService类,它继承Service类。在onStart()方法中,使用Timer类完成延时操作,在一个新线程中创建消息,并且在60秒后运行,代码如下:

public  class  TimeService  extends  Service  {



private  Timer  timer;



@Override



public  IBinder  onBind(Intent  intent)  {



return  null;



}



@Override



public  void  onCreate()  {



super.onCreate();



timer  =  new  Timer(true);  //创建Timer对象



}



@Override



public  void  onStart(Intent  intent,  int  startId)  {



super.onStart(intent,  startId);



timer.schedule(new  TimerTask()  {



@Override



public  void  run()  {



String  ns  =  Context.NOTIFICATION_SERVICE;



//获得通知管理器



NotificationManager  manager  =  (NotificationManager)  getSystemService(ns);



Notification  notification  =  new  Notification(R.drawable.warning,  getText(R.string.ticker_text),



System.currentTimeMillis());  //创建通知



CharSequence  contentTitle  =  getText(R.string.content_title);  //定义通知的标题



CharSequence  contentText  =  getText(R.string.content_text);  //定义通知的内容



Intent  intent  =  new  Intent(TimeService.this,  TimeActivity.class);  //创建Intent对象



PendingIntent  contentIntent  =  PendingIntent.getActivity(TimeService.this,  0,  intent,



Intent.FLAG_ACTIVITY_NEW_TASK);  //创建PendingIntent对象



//定义通知行为



notification.setLatestEventInfo(TimeService.this,  contentTitle,  contentText,  contentIntent);



manager.notify(0,  notification);  //显示通知



TimeService.this.stopSelf();  //停止服务



}



},  60000);



}



}

(3)在com.mingrisoft包中,定义TimeActivity类,它继承Activity类。在onCreate()方法中,启动服务。代码如下:

public  class  TimeActivity  extends  Activity  {



@Override



protected  void  onCreate(Bundle  savedInstanceState)  {



super.onCreate(savedInstanceState);



setContentView(R.layout.main);



startService(new  Intent(this,TimeService.class));



}



}

(4)修改AndroidManifest.xml文件,增加Activity和Service配置,其代码如下:








package="com.mingrisoft"



android:versionCode="1"



android:versionName="1.0"  >