`
cynhafa
  • 浏览: 155753 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android中的Service及其应用

 
阅读更多

http://express.ruanko.com/ruanko-express_22/webpage/tech-overnight_1.html

Android中的Service,其意思是“服务”,它是在后台运行,不可交互的。Service自己不能运行,需要通过某一个Activity或者其它Context对象来调用,如Context.startService()和Context.bindService()两种方式启动Service。

如果在Service的onCreate或者onStart方法中做一些很耗时的动作,最好是启动一个新线程来运行这个Service,因为,如果Service运行在主线程中,会影响到程序的UI操作或者阻塞主线程中的其它事情。

一个使用Service的典型的例子是,用户一边在手机做其他的事情,一边听手机上的音乐。其中,在后台播放音乐就可以使用Service来实现。在这个应用中,音乐播放这个功能并没有对应的Activity,因为使用者会认为在导航到其他屏幕时,音乐应该还在播放。

Service的生命周期方法比Activity要少一些,只有onCreate、onStart、onDestroy。有两种方式启动一个Service,他们对Service生命周期的影响是不一样的。

1)通过startService启动

Service启动的时候会经历生成 开始(onCreateonStart)过程,Service停止的时候直接进入销毁过程(onDestroy)。而如果是调用者直接退出而没有调用stopService,Service会一直在后台运行。直到下次调用者再启动起来,并明确调用stopService。

2)通过bindServic启动

通过bindService方法启动Service,其只会运行onCreate方法,如果调用这退出了,Service会调用onUnbind onDestroyed方法。

Service的onCreate方法只会被调用一次。如果先绑定了,那么启动的时候就直接运行Service的onStart方法,如果先启动,那么绑定的时候就直接运行onBind方法。如果先绑定上了,就停止不了,也就是stopService不能用了,只能先unbindService,再stopService,所以,先启动还是先绑定,是有区别的。

下面以一个通过Service来播放音乐的例子说明Service的具体用法,其具体界面如下所示:

a

在这个界面中,点击“Start Playing”按钮,即开始打开音乐文件,进行循环播放。点击“Stop Playing”按钮,即关闭音乐,并退出应用程序。其程序结构如下图所示:

ad

可以看到,其功能主要由Music与TestMusicService两个类组成,其源代码如下:

package com.shen.service;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.TextView;

public class TestMusicService extends Activity {

private TextView tv;

private Button btn1,btn2;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

btn1 = (Button) this.findViewById(R.id.btn1);

btn1.setOnClickListener(new ButtonListener1());

btn2 = (Button) this.findViewById(R.id.btn2);

btn2.setOnClickListener(new ButtonListener2());

}

private class ButtonListener1 implements OnClickListener{

public void onClick(View v) {

TestMusicService.this.startService(new Intent("com.shen.music1"));

}

}

private class ButtonListener2 implements OnClickListener{

public void onClick(View v) {

TestMusicService.this.stopService(new Intent("com.shen.music1"));

finish();

}

}

}

package com.shen.service;

import android.app.Service;

import android.content.Intent;

import android.media.MediaPlayer;

import android.os.IBinder;

public class Music extends Service {

private MediaPlayer mp;

public IBinder onBind(Intent intent) {

// TODO Auto-generated method stub

return null;

}

public void onStart (Intent intent, int startId) {

super.onStart(intent, startId);

if (mp != null){

mp.stop();

}

mp = MediaPlayer.create(this,R.raw.music_1);

mp.setLooping(true);

mp.start();

}

public void onDestroy () {

super.onDestroy();

mp.stop();

mp = null;

}

}

另外,需要在Manifest.xml文件中对Service进行注册。其注册信息如下所示:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.shen.service"

android:versionCode="1"

android:versionName="1.0">

<application android:icon="@drawable/icon" android:label="@string/app_name">

<activity android:name=".TestMusicService"

android:label="@string/app_name">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<service android:name=".Music">

<intent-filter>

<action android:name="com.shen.music1"/>

<category android:name="android.intent.category.default"/>

</intent-filter>

</service>

</application>

<uses-sdk android:minSdkVersion="2" />

</manifest>

分享到:
评论

相关推荐

    Android中Service组件的使用

    Android下Service组件的简单使用,具体可以参见博客:http://www.cnblogs.com/plokmju/p/Android_Service1.html

    Android应用开发详解

    第6章 Android组件之间的信使Intent Android 组件之间的信使Intent,讲述了Intent对象及其属性、Intent的实现策略和Intent的常见应用 第7章 Android Service组件 Android Service组件,讲述了Android中的后台服务...

    Android应用开发详解pdf.pdf

     第二篇 技术篇第6章 Android组件之间的信使IntentAndroid 组件之间的信使Intent,讲述了Intent对象及其属性、Intent的实现策略和Intent的常见应用  第7章 Android Service组件Android Service组件,讲述了...

    Android开发与应用——张荣,原书配套课件

    这是Android开发与应用,原书配套的课件,作者张荣,目录如下。 第1章 Android简介 1.1 手机操作系统 1.2 Android起源 1.3 Android特征 1.4 Android体系结构 1.4.1 应用层 1.4.2 应用框架层 1.4.3 ...

    Android课程第一次实验报告_Andorid应用程序Activity生命周期.docx

     Android一个重要并且特殊的特性就是,一个应用的进程的生命周期不是由应用自身直接控制的,而是由系统,根据运行中的应用的一些特征来决定的,包括:这些应用对用户的重要性、系统的全部可用内存。  对于应用...

    Android高级编程--源代码

    作为使用androidsdk构建这些应用程序的实用指南书籍,《android高级编程》从始至终穿插了一系列示例项目,每个项目都引入android的新功能和新技术,以助您达到最圆满的学习效果。书中介绍android的所有基本功能,并...

    Android四大组件简述

    Android四大组件简述demo用例。

    android核心分析pdf

    Android核心分析(23)----Andoird GDI之基本原理及其总体框架 Android核心分析(24)----Android GDI之显示缓冲管理 Android核心分析(25)----Android GDI之共享缓冲区机制 Android核心分析(26)----Android GDI...

    android 完全中文版 开发应用详解

    1.2.2 android应用开发 8 1.2.3 android系统开发 9 1.3 android的sdk与源代码 10 1.3.1 基于sdk的android开发 10 1.3.2 基于源代码sdk android开发 11 第2章 android系统开发综述 13 2.1 android的系统架构 13 2.1.1...

    Android通过startService播放背景音乐

    关于startService的基本使用概述及其生命周期可参见《Android中startService基本使用方法概述》。 本文通过播放背景音乐的简单示例,演示startService的基本使用流程,具体内容如下 系统界面如下: 界面上面就两...

    Android系统源代码情景分析 / 罗升阳著

    在内容上,《Android系统源代码情景分析(含CD光盘1张)》结合使用情景,全面、深入、细致地分析了Android系统的源代码,涉及到Linux内核层、硬件抽象层(HAL)、运行时库层(Runtime)、应用程序框架层...

    深入剖析Android系统中Service和IntentService的区别

    主要介绍了Android系统中Service和IntentService的区别,与普通的服务相比,IntentService可以开启单独的线程来处理intent请求,需要的朋友可以参考下

    android系统原理及开发要点详解

     第13章“Android应用程序概述及框架”,介绍Android应用程序层的基本概念和应用程序框架,这部分内容是Android自下而上的第4个层次,可以基于源代码或者SDK开发,它们之间的差别非常小。  第14章“Android应用...

    android开发资料大全

    Android 之 AIDL 和远程 Service 调用 Android 相对布局技巧 android开发环境之Logcat(日志)教程实例汇总 android网络通信之socket教程实例汇总 AsyncTask进度条加载网站数据到ListView 命令行开发、编译、打包...

    android开发期末大作业.zip

    1.通过本课程设计的实践及其前后的准备与总结,复习、领会、巩固和运用课堂上所学的Android手机应用开发知识。 2.为学生综合应用本专业所学习的多门课程知识(例如,软件工程、数据库、Java语言、Java Web开发等)...

    新版Android开发教程.rar

    生应用如:G oogle 地图及其衍生应用、 GMail 、 GTalk 等。 � GPS 卫星导航功能,手机照相, MP3 ,蓝芽等均被列为 Android 所提供支持的基本选项。 � Android 的平台基本上是免费的,虽然有部份原生链接库会...

    Android核心分析(pdf)

    Android核心分析(23)----Andoird GDI之基本原理及其总体框架 Android核心分析(24)----Android GDI之显示缓冲管理 Android核心分析(25)----Android GDI之共享缓冲区机制 Android核心分析(26)----Android GDI...

Global site tag (gtag.js) - Google Analytics