Android 之 Service服务介绍


Service 介绍


1.Service 是android 中四大组件与Activity最相似的地方,都代表的是可执行的程序;

2.Service 特点:
   a)在后台运行,一般处理比较耗时的任务;
   b)没有实际的界面;
   c)可以和其他组件进行交互;
   d)例如:处理音乐、下载文件等;

3.Service 的声明周期:
   a)三个阶段:创建 – 开始 --- 销毁
   b)OnCreate(); Service 声明周期的开始,完成Service的初始化工作;
   c)OnStartCommand(); 服务声明周期开始,没有对应的停止函数
   d)OnDestory(); 声明周期的结束,释放Service所占用的资源;
4.提示:一个服务只会创建一次,销毁一次,但是可以启动多次;

5.Service的启动方式:
  a)Conetext.startService();
  b)Contenxt.bindService();

6.图解生命周期:

7.启动服务:
   a)如果Service和调用服务的组件在同一个应用程序中,可以使用显式启动或隐式启动,显式更加容易使用,代码简洁;
   b)若服务和调用的服务的组件在不同的应用程序中,则只能使用隐式启动;

8.停止服务:
   a)StopService(intent);  调用onDestory() 一次;

9.绑定本地服务以及与服务之间的通讯:
   a)bindService(),方法实现绑定,unbindService() 解除绑定
   b)bindService(Intent service,ServiceConnection conn,int flags); 参数说明
      i.service通过Intent指定要启动的Service;
     ii.conn 该对象用于监听访问者与Service之间的链接情况,当访问者与Service之间成功链接时将回调onServiceconnected();断开链接时调用onServiceDisconnected() 方法
    iii.flags:指定绑定时是否自动创建Service, 0 表示不自动创建,BIND_AUTO_CREATEZ自动创建;
   c)提示:ServiceConnection 对象的onServiceconnected() 中有一个IBinder对象,使用该对象来实现与Service之间的通讯;


下面是案例代码:

mainfest 配置文件如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.sun.service"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="10" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.sun.service.MainActivity"
            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=".ServiceOne"></service>
        <!-- 注册服务,隐式启动 ,action 名称为执行动作代号-->
        <service android:name=".ServiceTwo">
            <intent-filter >
                <action android:name="sun.bind.service"/> 
            </intent-filter>       
        </service>
    </application>

</manifest>



主程序入口:
package com.sun.service;

import android.app.Activity;
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;

public class MainActivity extends Activity {

	// 声明组件对象
	private Button start, stop, bind, unbind, result; // 提示:成员变量都是有默认值的

	private ServiceTwo serviceTwo; //对象声明
	//绑定服务 链接
	private ServiceConnection serviceConnection = new ServiceConnection() {

		// 绑定服务
		public void onServiceConnected(ComponentName name, IBinder service) {

			// 用于获取服务返回的数据信息 -- 此处获取ServiceTwo的对象
			serviceTwo = ((ServiceTwo.MyBinder)service).getService();
			Log.i("msg","获取到了serviceTwo对象");
		}

		// 解绑服务
		public void onServiceDisconnected(ComponentName name) {


		}

	};

	/**
	 * 初始化信息
	 */
	public void init() {
		start = (Button) findViewById(R.id.start);
		stop = (Button) findViewById(R.id.stop);
		bind = (Button) findViewById(R.id.bind);
		unbind = (Button) findViewById(R.id.unbind);
		result = (Button) findViewById(R.id.result);
	}

	// 程序入口
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		this.init(); // 初始化数据

		// 设置事件坚听
		start.setOnClickListener(listener);
		stop.setOnClickListener(listener);
		bind.setOnClickListener(listener);
		unbind.setOnClickListener(listener);
		result.setOnClickListener(listener);

	}

	// 按钮事件动作
	private OnClickListener listener = new OnClickListener() {

		public void onClick(View v) {
			int id = v.getId();
			if (id == R.id.start) {// 启动服务
				startAction();
				return;
			}
			if (id == R.id.stop) { // 停止服务
				StopAction();
				return;
			}
			if (id == R.id.bind) { // 绑定服务
				bindAction();
				return;
			}
			if (id == R.id.unbind) { // 解绑服务
				unbindAction();
				return;
			}
			if (id == R.id.result) { // 获取数据

				return;
			}

		}
	};

	/**
	 * StartService 开始服务
	 */
	public void startAction(){
		Intent intent = new Intent(MainActivity.this,ServiceOne.class);
		startService(intent); // 停止服务
	}

	/**
	 * StopService 停止服务 
	 */
	public void StopAction(){
		Intent intent = new Intent(MainActivity.this,ServiceOne.class);
		stopService(intent);
	}

	/**
	 * bindService 绑定服务
	 */
	public void bindAction(){
		Intent intent = new Intent();
		intent.setAction("sun.bind.service");
		bindService(intent, serviceConnection,BIND_AUTO_CREATE);
	}

	/**
	 * unbindService 解绑服务 
	 */
	public void unbindAction(){
		unbindService(serviceConnection); //解绑服务
	}

	/**
	 * 从服务中获取数据
	 */
	public void getResultAction(){
		
	}

}


[b]服务: 方式一[/b]
package com.sun.service;

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

/**
 * 启动服务方式一 测试
 * 
 * @author Administrator
 * 
 */
public class ServiceOne extends Service {

	/**
	 * 创建服务
	 */
	public void onCreate() {
		super.onCreate();
		Log.i("msg", "onCreate()...");
		Toast.makeText(ServiceOne.this, "onCreate()...", Toast.LENGTH_LONG).show();
	}

	/**
	 * 启动服务
	 */
	public int onStartCommand(Intent intent, int flags, int startId) {
		Log.i("msg", "onStartCommand()...");
		Toast.makeText(ServiceOne.this, "onStartCommand()...", Toast.LENGTH_LONG).show();
		return super.onStartCommand(intent, flags, startId);
	}

	/**
	 * 销毁服务
	 * 此处做资源
	 */
	public void onDestroy() {
		Log.i("msg", "onDestroy()...");
		Toast.makeText(ServiceOne.this, "onDestroy()...", Toast.LENGTH_LONG).show();
		super.onDestroy();
	}

	/**
	 * 启动服务
	 */
	public void onStart(Intent intent, int startId) {
		super.onStart(intent, startId);
		Log.i("msg", "onStart()...");
		Toast.makeText(ServiceOne.this, "onStart()...", Toast.LENGTH_LONG).show();
	}

	/**
	 * 给客户端返回一个借口实例
	 */
	public IBinder onBind(Intent intent) {

		return null;
	}

}

服务方式二:绑定服务
package com.sun.service;

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

/**
 * 服务测试 -- 绑定服务测试
 * 注意:此声明周期,所有的方法只能调用一次
 * @author Administrator
 * 
 */
public class ServiceTwo extends Service {

	//自定义Binder
	public class MyBinder extends Binder{
		public ServiceTwo getService(){
			Log.i("msg","getService()...");
			return ServiceTwo.this; // 返回服务
		}
	}
	
	private MyBinder myBinder = new MyBinder(); //获取对象
	
	/**
	 * 创建服务,首次启动时执行
	 */
	public void onCreate() {
		super.onCreate();
		Log.i("msg","onBind()中的oncreate()...");
	}

	/**
	 * 绑定服务,同时给客户端返回一个借口实例
	 * 只可绑定一次,不可多次绑定
	 */
	public IBinder onBind(Intent intent) {
		Log.i("msg","onBind()...");
		return myBinder; // 返回一个对象,继承了Binder的对象
	}

	/**
	 * 解绑服务
	 */
	public boolean onUnbind(Intent intent) {
		
		Log.i("msg","onUnbind()...");
		return super.onUnbind(intent);
	}

	/**
	 * 销毁服务
	 */
	public void onDestroy() {
		Log.i("msg","onBind()中的onDestroy()...");
		super.onDestroy();
	}

}

猜你喜欢

转载自sunzone.iteye.com/blog/1998116
今日推荐