`

玩转Android---组件篇---Service(服务)

阅读更多

ServiceAndorid系统提供的四大组件之一,它的地位和Activity是并列的,只是使用的频率没有Activity高。Service就是运行于后台的一种服务程序,一般很少和用户交互,因此没有可视化界面。

         定义一个Service类只要继承Service类即可,实现其生命周期中的方法就可以了,另外,一个定义好的Service组件必须要在AndoridManifest.xml文件中注册才能够使用。

         Service有自己的生命周期,可以调用startService()启动一个Service或者使用bindService()来绑定一个service,还可以通过RPC(远程进程调用)机制来实现不同进程间Service的调用。

 

Service中定义了一系列和自身生命周期相关的方法:

onBind(Intent intent):是必须实现的一个方法,返回一个绑定的接口给Service

onCreate():当Service第一次被创建时,由系统调用。

onStart(Intent intent,int startId):当通过startService()方法启动Service时,该方法被调用。

onDestroy():当Service不再使用,系统调用该方法。

 

实例如下:

MyService.java

/*
 * @author hualang
 */
package org.hualang.service;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;

public class MyService extends Service {

	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		Log.i("SERVICE", "onBind.................");
		Toast.makeText(MyService.this, "onBind.................", Toast.LENGTH_LONG).show();
		return null;
	}
	
	public void onCreate()
	{
		Log.i("SERVICE", "onCreate................");
		Toast.makeText(MyService.this, "onCreate................", Toast.LENGTH_LONG).show();
	}
	public void onStart(Intent intent,int startId)
	{
		Log.i("SERVICE", "onStart.................");
		Toast.makeText(MyService.this, "onStart.................", Toast.LENGTH_LONG).show();
	}
	public void onDestroy()
	{
		Log.i("SERVICE", "onDestroy.................");
		Toast.makeText(MyService.this, "onDestroy.................", Toast.LENGTH_LONG).show();
	}
}

 ServiceTest.java

/*
 * @author hualang
 */
package org.hualang.service;

import android.app.Activity;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class ServiceTest extends Activity {
    /** Called when the activity is first created. */
	private Button startService,stopService,bindService,unbindService;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        startService=(Button)findViewById(R.id.startButton);
        stopService=(Button)findViewById(R.id.stopButton);
        bindService=(Button)findViewById(R.id.bindButton);
        unbindService=(Button)findViewById(R.id.unbindButton);
        startService.setOnClickListener(startListener);
        stopService.setOnClickListener(stopListener);
        bindService.setOnClickListener(bindListener);
        unbindService.setOnClickListener(unbindListener);
        
    }
    private OnClickListener startListener=new OnClickListener()
    {

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			Intent intent=new Intent();
			intent.setAction("org.hualang.service.action.MYSERVICE");
			startService(intent);
		}
    	
    };
    private OnClickListener stopListener=new OnClickListener()
    {

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			Intent intent=new Intent();
			intent.setAction("org.hualang.service.action.MYSERVICE");
			stopService(intent);
		}
    	
    };
    private ServiceConnection conn=new ServiceConnection()
    {

		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			// TODO Auto-generated method stub
			Log.i("SERVICE", "connection success");
			Toast.makeText(ServiceTest.this, "connection success", Toast.LENGTH_LONG).show();
		}

		@Override
		public void onServiceDisconnected(ComponentName name) {
			// TODO Auto-generated method stub
			Log.i("SERVICE", "connection success");
			Toast.makeText(ServiceTest.this, "connection failure", Toast.LENGTH_LONG).show();
		}
    	
    };
    private OnClickListener bindListener=new OnClickListener()
    {

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			Intent intent=new Intent();
			intent.setAction("org.hualang.service.action.MYSERVICE");
			bindService(intent,conn,Service.BIND_AUTO_CREATE);
		}
    	
    };
    private OnClickListener unbindListener=new OnClickListener()
    {

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			Intent intent=new Intent();
			intent.setAction("org.hualang.service.action.MYSERVICE");
			unbindService(conn);
		}
    	
    };
}

 

在AndroidManifest.xml文件中注册Service如下

<service android:name="MyService">
			<intent-filter>
				<action android:name="org.hualang.service.action.MYSERVICE"/>
			</intent-filter>
		</service>

 main.xml布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
	<Button
		android:text="启动Service"
		android:id="@+id/startButton"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
	/>
		<Button
		android:text="停止Service"
		android:id="@+id/stopButton"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
	/>
		<Button
		android:text="绑定Service"
		android:id="@+id/bindButton"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
	/>
		<Button
		android:text="解除绑定unbindService"
		android:id="@+id/unbindButton"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
	/>
</LinearLayout>

 

不解释,看运行结果就会明白

(1)当点击“启动Servcie”会先弹出"onCreate",然后弹出"onStart"的Toast,在LogCat中会看到先显示

的也是

onCreate

onStart


(2)点击“停止Service”按钮,会弹出onDestroy的Toast

LogCat中也会显示

onDestroy()



 (3)点击"绑定Service"按钮,会弹出onCreate和onBind的Toast

LogCat中显示

onCreate

onBind



 (4)点击“解除绑定Service”按钮,会弹出onDestroy的Toast,LogCat中也如此



 

下面是LogCat中显示的信息

 


 
  • 大小: 15.4 KB
  • 大小: 15.9 KB
  • 大小: 15.6 KB
  • 大小: 15.1 KB
  • 大小: 5.3 KB
分享到:
评论
6 楼 songfantasy 2011-04-15  
LZ 是个好人……
5 楼 hot66hot 2011-04-14  
LZ辛苦。
4 楼 xici_magic 2011-04-14  
挺不错的  学习啦
3 楼 mini_hu 2011-04-13  
路过,支持一下

+1
2 楼 guoyangjie 2011-04-12  
我也投一票。。。。。。。。。。。。。
1 楼 lipeng88213 2011-04-11  
没人回复?投个良好 呵呵

相关推荐

    玩转Android---组件篇---Handler的使用

    此外,Handler还可以与其他组件(如Service、BroadcastReceiver等)配合使用,实现更复杂的异步通信场景。 在实际开发中,常常结合AsyncTask、IntentService等其他异步处理方式一起使用,以应对各种复杂的线程同步...

    玩转Android之-权限设置

    ### 玩转Android之-权限设置 在深入探讨Android中的权限设置之前,我们先来了解下Android系统是如何管理应用程序的权限的。Android系统通过权限(Permission)机制控制应用程序访问受保护的数据或执行可能对用户...

    android-services:玩转Android服务

    本教程将深入探讨如何“玩转Android服务”,并结合Java编程语言来实现服务的测试代码。 一、Android服务概述 Android服务主要用来执行在后台持续进行的任务,例如播放音乐、定时任务、网络通信等。服务并不提供用户...

    Android嵌入式Linux终极实战

    开发者需要掌握Activity、Intent、Service、BroadcastReceiver等核心概念,以及如何使用XML布局文件和Android框架提供的各种服务。 总的来说,《Android嵌入式Linux终极实战》是一本全面的教程,涵盖了从底层硬件...

    基于Android平台的俄罗斯方块--毕业设计

    Android应用通常由Activity、Service、BroadcastReceiver、ContentProvider和Intent等组件构成。在这个项目中,Activity将是游戏的主要界面,负责处理用户交互。开发者需要利用Android的布局管理器如LinearLayout、...

    Android版俄罗斯方块

    在Android平台上实现这一游戏,需要深入理解Android系统的四大组件——Activity、Service、BroadcastReceiver和ContentProvider,并结合第三方服务如bmob的后台服务器。本文将详细解析这些知识点在构建Android版...

    Android高级应用源码-微信打灰机源码.zip

    Android应用主要由四大组件构成:Activity(活动)、Service(服务)、BroadcastReceiver(广播接收器)和ContentProvider(内容提供者)。在微信打灰机游戏中,Activity可能被用来处理用户界面和游戏交互,例如游戏...

    毕业论文安卓301玩转英语app.doc

    * Android应用程序开发技术包括Java语言、XML布局文件、Activity、Service、Broadcast Receiver、Content Provider等组件。 * Android应用程序的生命周期包括创建、启动、运行、暂停、停止和销毁六个状态。 * MVC...

    基于android环境的俄罗斯方块---大学毕业(论文)设计.doc

    1. Android 环境下的游戏开发:Android 是 Google 开发的基于 Linux 平台的开源手机操作系统,具有四大基本组件:Activity、Service、Content Provider、BroadcastReceiver。 2. Eclipse 的使用:Eclipse 是一种可视...

    InteractiveStoryApp:玩转Android工具

    《InteractiveStoryApp:玩转Android工具》 在移动应用开发领域,Android平台因其开源特性以及广泛的应用场景,一直是开发者们的热门选择。本文将深入探讨基于Java语言开发的InteractiveStoryApp,帮助你掌握如何...

    安卓开发-完美版的Android 拼图游戏APK和工程源码.zip

    一个Android应用通常由多个组件组成,包括Activity(活动)、Service(服务)、BroadcastReceiver(广播接收器)和ContentProvider(内容提供者)。在这个拼图游戏中,主要涉及Activity,因为它负责用户界面和交互...

    超炫的Android军旗源代码

    了解Android四大组件(Activity、Service、BroadcastReceiver、ContentProvider)和布局管理器(如LinearLayout、RelativeLayout、ConstraintLayout等)是必要的。 2. **用户界面设计** 源代码中的界面设计采用了...

    Android技术总结+面试题

    【Android技术总结与面试题解析】 在Android领域,面试题往往涵盖了从基础知识到高级概念的广泛范围。以下是一些常见的Android技术知识点和面试问题的详细解答: 1. **ANR (Application Not Responding)**:当应用...

    基于android环境的俄罗斯方块-毕业设计.doc

    游戏的主要组件包括 Activity、Service、Content Provider 和 BroadcastReceiver。游戏的界面设计包括游戏菜单界面、游戏运行界面、帮助界面、排行榜界面和游戏结束界面。 游戏的规则是玩家通过点触虚拟键盘,左右...

    基于android环境的俄罗斯方块-毕设论文.doc

    在开发过程中,我们使用了 Android 四大基本组件分别是 Activity、Service、Content Provider 和 BroadcastReceiver。Activity 是一个单独的屏幕,可以显示一些控件也可以监听并处理用户的事件做出响应。Service 是...

    Android蓝牙开发系列文章-玩转BLE开发(一)

    - **Service**:服务是数据和服务功能的逻辑组合,可以是SIG定义的标准服务,也可以是自定义服务。每个服务可以包含一个或多个特性(Characteristic)。 - **Characteristic**:特性是数据的最小单位,包含一个值...

    android开发的简单小游戏通水管

    在Android中,这些可以通过Activity、Service、BroadcastReceiver等组件实现。在这个游戏中,我们需要一个主Activity来展示游戏画面,处理用户输入,并调用游戏逻辑进行得分计算。 4. **布局设计** 使用XML布局...

    基于android环境的俄罗斯方块设计说明.doc

    Android作为由Google开发的基于Linux平台的开源手机操作系统,为开发者提供了丰富的API以及四大基本组件——Activity(活动)、Service(服务)、Content Provider(内容提供者)和Broadcast Receiver(广播接收器)...

Global site tag (gtag.js) - Google Analytics