Android开发四大组件之Service(实例篇)

关于Service的开发详解已经在上一篇:Android开发四大组件之Service(详解篇)讲的很清楚了,本篇主要对Service的开发实例做下讲解。

程序运行效果图:

程序代码:

BindService:


package com.jph.servicedemo;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
/**
 * Describe:</br>
 * Service子类
 * BindService实现了Service并重写了父类的
 * onBind、onCreate、onDestroy、onUnbind
 * 以及onDestroy等方法。
 * 并在onCreate方法中创建并启动一个线程,动态修改count变量值,
 * 创建Binder的子类LocalService类,用于作为绑定该Service时,
 * 回调方法的返回对象。
 * @author JPH
 * Date:2014.07.21
 * */
public class BindService extends Service {
	private int count=0;
	private boolean	isQuit=false;
	//定义getService方法返回的对象
	public  LocalService localService=new LocalService();
	//创建Binder子类
	public class LocalService extends Binder{
		public int getCount() {
			return count;
		}
		public BindService getService() {
			return BindService.this;
		}
	}
	//Service子类必须实现的方法,绑定该Service时回调的方法
	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return localService;
	}
	//Service被创建是调用该方法
	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		System.out.println("Service is Created.");
		//创建并启动一个线程,动态修改count变量值
		new Thread(){
			@Override
			public void run() {
				// TODO Auto-generated method stub
				while (!isQuit) {
					try {
						Thread.sleep(1000);//使得当前线程休眠1000毫秒
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					count++;
				}
			}
		}.start();
		super.onCreate();
	}
	//在所有onUnbind被回调之后调用
	@Override
	public void onDestroy() {
		// TODO Auto-generated method stub
		System.out.println("Service is Destroyed.");
		isQuit=true;
		super.onDestroy();
	}
	//定义一个返回实例名的方法
	public String getDemoName() {
		return "Service实例";
	}
	//在所有与Service绑定的客户端都解除绑定之后被回调
	@Override
	public boolean onUnbind(Intent intent) {
		// TODO Auto-generated method stub
		System.out.println("Service is Unbind.");
		return true;//表示下次客户端绑定的时候接受一个onRebind()的调用(而不是调用 onBind())
	}

}

ServiceDemo:


package com.jph.servicedemo;

import com.jph.servicedemo.BindService.LocalService;

import android.os.Bundle;
import android.os.IBinder;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
/**
 * Describe:</br>
 * Service实例
 * 本实例简单实现了绑定Service并与之通信
 * @author JPH
 * Date:2014.07.21
 * */
public class ServiceDemo extends Activity {
	Button btnBind,btnUnBind,btnGetServiceStatus;
	BindService bindService;
	LocalService localService;
	private boolean isBind=false;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		btnBind=(Button)findViewById(R.id.btnBind);
		btnUnBind=(Button)findViewById(R.id.btnUnBind);
		btnGetServiceStatus=(Button)findViewById(R.id.btnGetServiceStatus);
		OnClickListener listener=new OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				switch (v.getId()) {
				case R.id.btnBind:
//					Intent intent=new Intent();
//					intent.setAction("com.jph.servicedemo.BIND_SERVICE"); //隐式启动Service
					Intent intent=new Intent(ServiceDemo.this,BindService.class);//显示启动Service
					//绑定指定的Service
					bindService(intent, serviceConnection, BIND_AUTO_CREATE);
					isBind=true;
					break;
				case R.id.btnUnBind:
					if (isBind) {
						//解除绑定Service
						unbindService(serviceConnection);
						isBind=false;
						bindService=null;
						Toast.makeText(ServiceDemo.this,"--Service is Unbind.--"
								, Toast.LENGTH_LONG).show();
					}else {
						Toast.makeText(ServiceDemo.this,"--你还未绑定Service--"
								, Toast.LENGTH_LONG).show();
					}
					break;
				case R.id.btnGetServiceStatus:
					if (bindService==null) {
						Toast.makeText(ServiceDemo.this,"请先绑定Service"
								, Toast.LENGTH_LONG).show();
					}else {
						Toast.makeText(ServiceDemo.this,"App name:"+
								bindService.getDemoName()+"\n count:"+
								localService.getCount(), Toast.LENGTH_LONG).show();
					}
					break;
				}
			}
		};
		btnBind.setOnClickListener(listener);
		btnGetServiceStatus.setOnClickListener(listener);
		btnUnBind.setOnClickListener(listener);
	}
	//定义一个ServiceConnection对象
	private ServiceConnection serviceConnection=new ServiceConnection() {
		//当Activity与Service连接成功的时候回调该方法
		@Override
		public void onServiceDisconnected(ComponentName name) {
			// TODO Auto-generated method stub
				bindService=null;
				Toast.makeText(ServiceDemo.this,"--Service UnConnected.--"
						, Toast.LENGTH_LONG).show();
		}
		//当Activity与Service通过非UnBind()方法断开连接的时候回调该方法
		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			// TODO Auto-generated method stub
			//获取getService()方法返回的BindService对象
			localService=((LocalService)service);
			bindService=localService.getService();
			Toast.makeText(ServiceDemo.this,"--Service Connected.--"
					, Toast.LENGTH_LONG).show();
			System.out.println("--Service Connected.--");
		}
	};
}

AndroidManifest.xml:


<!-- 配置一个Service组件 -->
		<service android:name=".BindService">
			<intent-filter>
				<!-- 为该Service组件的intent-filter配置action -->
                <action android:name="com.jph.servicedemo.BIND_SERVICE"></action>
            </intent-filter>
        </service>

实例分析:

通过DDMS的LogCat有如上图所示的输出:

如果用户单击程序界面上的“绑定service”按钮即可看到上图所示的“Service is Created.”与“--Service Connected.--”的输出。当该Activity中绑定该Service之后,该Activity还可以通过LocalService对象获取Service的运行状态,如果用户单击程序界面上的“获取Service状态”按钮即可看到程序界面弹出的提示信息。如果我们单击“解除绑定”按钮,即可看到LogCat中的

输出信息:“Service is Unbind.”,“Service is Destroyed.”,当程序调用ubbindService()方法解除对某个Service的绑定时,系统会先回调Service的ubbindService()方法,然后回调onDestory()方法,这正验证了上一篇中讲到的onDestroy()是Service生命周期中最后一个被回调的方法。

与多次调用startService()方法启动Service不同的是,多次调用bindService()方法并不会重复绑定。在这个实例中不管用户单击“绑定Service”对少次,系统只会回调Service的onBind()方法一次。

时间: 2024-10-10 10:56:33

Android开发四大组件之Service(实例篇)的相关文章

Android开发四大组件之Service

Android开发之四大组件--Service 一.Service 简介 Service是android系统中的四大组件之一(Activity.Service.BroadcastReceiver.ContentProvider),它跟Activity的级别差不多,区别是Service只能运行在后台不提供用户界面,并且可以和其他组件进行交互.一个Service是一个可以长期运行在后台的应用程序组件,不提供用户界面. 另一个应用程序组件可以启动一个服务,它将继续在后台运行,即使 用户切换到另一个应用

个帖子学会Android开发四大组件

黑色幽默Lion 方向比努力重要,能力比知识重要,情商比智商重要! 首页 新闻 新随笔 管理 随笔- 43  文章- 0  评论- 12 一个帖子学会Android开发四大组件 注:本文来自"友盟杯",仅在此阅读,学习 这个文章主要是讲Android开发的四大组件,本文主要分为 一.Activity详解二.Service详解三.Broadcast Receiver详解四.Content Provider详解外加一个重要组件 intent的详解. 一.Activity详解Activty的

Android开发四大组件--Activity详解

Android开发四大组件--Activity详解 - Android开发教程 Android开发的四大组件在开发中应用中是必不可少的,下面就来详解下四大组件之一Activity,总结自网络.Activty的生命周期的也就是它所在进程的生命周期. 一个Activity的启动顺序: onCreate()——>onStart()——>onResume() 当另一个Activity启动时: 第一个Activity onPause()——>第二个Activity onCreate()——>

Android开发四大组件概述

这个文章主要是讲Android开发的四大组件,本文主要分为 一.Activity具体解释 二.Service具体解释 三.Broadcast Receiver具体解释 四.Content Provider具体解释 外加一个重要组件 intent的具体解释.(主要来自于网络) 1.Activity 一个Activity通常展现为一个可视化的用户界面.比如,一个activity可能展现为一个用户能够选择的菜单项列表或者展现一些图片以及图 片的标题.一个消息服务应用程序可能包括一个显示联系人列表的ac

一个帖子学会Android开发四大组件

这个文章主要是讲Android开发的四大组件,本文主要分为 一.Activity详解 二.Service详解 三.Broadcast Receiver详解 四.Content Provider详解 外加一个重要组件 intent的详解. 文章有部分内容来自网络,本文是一个总结性文章. 一.Activity详解 Activty的生命周期的也就是它所在进程的生命周期. 一个Activity的启动顺序: onCreate()-->onStart()-->onResume() 当另一个Activity

一天就学会Android开发四大组件

这个文章主要是讲Android开发的四大组件,本文主要分为 一.Activity详解 二.Service详解 三.Broadcast Receiver详解 四.Content Provider详解 外加一个重要组件 intent的详解. 一.Activity详解 Activty的生命周期的也就是它所在进程的生命周期. 一个Activity的启动顺序: onCreate()-->onStart()-->onResume() 当另一个Activity启动时: 第一个Activity onPause

从零开始学android开发-四大组件之一 Activity

1.Activity是Android四大组件(Application Components)之一,简单来说Activity就是平常所见到的用户界面,一般情况下,一个Activity所占的窗口是满屏的,但也可以是一个小的位于其它Activity之上的浮动窗口.一个Android工程至少有一个Activity,Activity上面可布有多个view的实例,如文本框.进度条.复选框.按钮等等.多个Activity之间通过Intent来实现跳转. 注:每新建一个activity,就要继承(extends

Android基础 ————四大组件之Service

public abstract class Service OverView: A service is an application component representing either an application's desire to perform a long-running operation while not interacting with user or to supply functionality for other applications to use.Eac

【Android的从零单排开发日记】之入门篇(五)——Android四大组件之Service

这几天忙着驾校考试,连电脑都碰不到了,今天总算告一段落了~~Service作为Android的服务组件,默默地在后台为整个程序服务,辅助应用与系统中的其他组件或系统服务进行沟通.它跟Activity的级别差不多,但不能自己运行只能后台运行.service可以在很多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等, 总之服务总是藏在后台的. ps:Service运行在主线程中的,所