`
1140566087
  • 浏览: 559356 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
博客专栏
2c4ae07c-10c2-3bb0-a106-d91fe0a10f37
c/c++ 入门笔记
浏览量:18540
3161ba8d-c410-3ef9-871c-3e48524c5263
Android 学习笔记
浏览量:314181
Group-logo
J2ME 基础学习课程集
浏览量:18759
A98a97d4-eb03-3faf-af96-c7c28f709feb
Spring 学习过程记录...
浏览量:17583
社区版块
存档分类
最新评论

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();
	}

}
分享到:
评论

相关推荐

    android学习之Service启动1

    在Android开发中,Service是四大组件之一,它用于在后台执行长时间运行的操作,而不与用户交互。本篇文章将深入探讨“android学习之Service启动1”的主题,主要关注Service的启动方式及其基本用法。 首先,Service...

    Android之Service实现比较大小

    在Android开发中,Service是应用程序组件之一,用于在后台执行长时间运行的操作,即使用户与应用程序交互的界面已关闭。本篇文章将深入探讨Android中的Service,分析不同类型的Service及其特性,并对比它们之间的...

    android service 简单实例源代码

    在Android开发中,Service是四大组件之一,它在后台运行,不与用户界面直接交互,常用于执行长时间的任务,如播放音乐、网络通信等。本篇文章将深入解析"android service 简单实例源代码",帮助你理解如何在Android...

    Android服务Service详解

    在Android应用开发中,Service是四大组件之一,用于执行长时间运行的任务,如后台音乐播放、网络数据下载等。Service不同于Activity,它没有用户界面,但可以在后台持续运行,即使用户切换到其他应用也不会受到影响...

    Android防止service多次执行startCommand

    在Android应用开发中,Service是四大组件之一,用于在后台长时间运行操作,比如播放音乐、网络通信等。然而,如果不加以控制,用户或者系统可能会多次启动同一个Service,导致不必要的资源消耗和服务的异常行为。本...

    Android-Service与Activity传值

    在Android应用开发中,`Service`和`Activity`是两个重要的组件。`Service`用于在后台执行长时间运行的任务,而`Activity`则负责用户界面交互。在某些场景下,我们可能需要在`Service`和`Activity`之间传递数据,比如...

    Android 远程服务(remote service)

    服务(Service)是Android四大组件之一,它在后台执行任务,不与用户界面交互。服务可以长时间运行,即使用户离开应用,服务仍然可以持续执行。 **二、远程服务原理** 1. **AIDL(Android Interface Definition ...

    Android学习之Service练习

    在"Android学习之Service练习"中,我们将深入探讨如何创建、启动和绑定到`Service`,以及`Service`在实际应用中的常见用途。 1. **什么是Service?** `Service` 是Android四大组件之一,用于执行长时间运行的操作...

    Android服务Service_详解.pdf

    Android服务(Service)是Android操作系统中四个核心应用程序组件之一,其他三个分别是Activity、BroadcastReceiver和ContentProvider,它们在Android应用开发中的作用和使用场景各不相同。Service的作用主要体现在...

    QT for Android下Service的创建

    综上所述,QT for Android下Service的创建是一项涉及多层技术融合的任务,包括Qt编程、Android原生服务的理解、JNI编程以及跨平台通信。通过熟练掌握这些技能,开发者可以构建出功能强大且高效的Android应用,充分...

    Android Studio Service安卓在服务中如何弹出Dialog

    在Android开发中,服务(Service)是用于在后台执行长时间运行任务的重要组件,不与用户界面直接交互。然而,有时我们需要在服务中弹出一个Dialog来通知用户或获取用户输入。`Android Studio`作为官方推荐的集成开发...

    Android local service demo

    在Android开发中,服务(Service)是一个至关重要的组件,它允许应用程序在后台执行长时间运行的操作,即使用户没有与应用交互。本示例“Android local service demo”聚焦于本地服务(Local Service),它是Android...

    android Service类简介

    这篇博客文章将深入介绍Android Service类的基本概念、功能、生命周期以及如何在实际应用中使用。 首先,Service不同于Activity,Activity是用户可见且可交互的组件,而Service则是隐藏在后台运行,它不包含用户...

    Android 实现进程及Service常驻之MarsDaemon源码

    本文将深入探讨如何使用MarsDaemon源码实现Android进程及Service的常驻,确保服务即使在用户退出应用或者系统清理内存时也能持续运行。 首先,了解Android的进程生命周期是至关重要的。Android系统为了优化资源管理...

    Android系统在新进程中启动自定义服务过程(startService)的原理

    "Android系统在新进程中启动自定义服务过程(startService)的原理" 在 Android 系统中,startService 函数是一个非常重要的函数,它允许开发者在新进程中启动自定义服务。这项技术可以将一些计算型逻辑从主进程中...

    如何创建android系统服务

    android系统级的服务包含了Android Service 和Native Service . Android Service 也称作 Java Service ,是用JAVA语言编写的,实现在框架层。 Native Service 也称作 System Service ,是用C++语言编写的,实现...

    Android Service之bound实现

    本文将深入探讨“Android Service之bound实现”,理解如何通过绑定服务(Bound Service)来创建一个与应用程序组件交互的服务。 首先,我们要了解服务的两种基本类型:Start Service和Bound Service。Start Service...

    android_service服务器

    在Android系统中,服务(Service)是一种特殊类型的组件,它在后台执行长时间运行的操作而无需用户界面。在“android_service服务器”这个主题中,我们主要关注的是如何在Android应用程序中创建和管理服务,特别是...

    android 录音机 service 例子

    Service是Android四大组件之一,用于在后台长时间运行任务,不受用户界面交互的影响。在这个"android 录音机 service 例子"中,我们将深入探讨如何结合Service和MediaRecorder来创建一个能够后台录制音频的应用。 1...

Global site tag (gtag.js) - Google Analytics