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

Android 之 Service服务

阅读更多
使用Service 进行后台服务

1、Service 简介:
Service是Android系统中的四大组件之一,它是一种长生命周期的,没有可
视化界面,运行与后台的一种服务程序;

What is Service?
Service就是系统中的服务:
特点:
* 无法与用户直接进行交互;
* 必须由用户或者其他程序显示的来启动,优先级比较高;
* 比处于前台的应用优先级低,但是比后台的其他应用程序优先级高;

When?
当需要某些程序在后台运行的时候就使用Service;当Activity的生命周期结束的时候,
Service还是存在的;

2、Service的分类:本地service  和  远程service;
本地service:就是和当前的应用在同一个进程的service,彼此之间有共同的内存区域,
所以对于某些数据的共享特别的方便和简单;

远程service:主要牵扯到不同进程间的service访问。因为android的系统安全的原因导致
了我们在不同的进程间无法使用一般的方式共享数据。因此:android为我们提供了一个AIDL
(android interface description language)接口描述语言;

3、Service生命周期:
service的生命周期相比于Activity比较简单:

onCreate() ---> onStart() ---> onDestroy() 这三个方法;

注:在一次生命周期中,服务只能被创建一次,销毁一次,但是可以启动多次;

在Activity中与service有关的方法为:

情况一:
startService(Intent intent); 启动一个service
stopService(Intent intent); 停止一个service

情况二:当想使用service中的一些数据的或者访问其中的一些方法时:
bindService(Intent intent,ServiceConnection conn,int flags);
unbindService(ServiceConnection conn);

参数说明:
参1:跳转到service的intent;
参2:conn 代表一个与service连接状态的类,当连接service成功或失败
时会主动触发其(ServiceConnection)内部的onServiceConnected()或者
onServiceDisconnected()方法,如果想要访问service的数据,那么可以
在onServiceConnected()方法中进行;
小贴士:
使用服务绑定,当acitivity生命周期结束后service的生命周期也跟着结束,
他们的关系时同存亡的;

4、service的使用步骤:
①:创建一个类继承service这个类;
②:每一个组件都要在androidManifest.xml中进行注册;
③:在Activiy中进行启动、绑定、解绑、或者精致service;

案例:实现音乐后台播放;


Activity代码部分:
package com.example.service;

import com.example.service.MyServiceForData.MyBinder;

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



/* service 使用 测试 */
public class MainActivity extends Activity {

   /*  生命组件对象  */
	private Button startService;
	private Button stopService;
	private Button bindService;
	private Button unbindService;
	private Button getData;
	
	private Intent intent;
	private Intent intentForData;
	
	/* 声明一个Binder对象, 用于指引到service中onBind()返回的Binder对象 */
	private MyBinder binder=null;
	
	/* 表示与service连接状态的类 :ServiceConnection */
	public ServiceConnection conn = new ServiceConnection() {
		
		/* 表示连接service失败 */
		public void onServiceDisconnected(ComponentName name) {
			
		}
		
		/* 表示连接service成功 */
		/* 参1:连接到service组件的名称 ; 参2:在service中返回的IBinder对象 */
		public void onServiceConnected(ComponentName name, IBinder service) {
			binder = (MyBinder) service; 
		
		}
	};
	
	
	/* 获得组件对象 */
	protected void init(){
		startService = (Button) findViewById(R.id.startService);
		stopService = (Button) findViewById(R.id.stopService);
		bindService = (Button) findViewById(R.id.bindService);
		unbindService= (Button) findViewById(R.id.unbindService);
		getData = (Button) findViewById(R.id.getData);
	}
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        /* 调用init()方法 , 初始化组件对象 */
        init();
        
        /* new一个Intent对象,实现service的调用 ,交互 */
        intent = new Intent(MainActivity.this,MyService.class);
        intentForData = new Intent(MainActivity.this,MyServiceForData.class);
        
        
        /* 为startService写OnClickListener事件,开启service */
        startService.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {
				/* 启动服务 */
				startService(intent);		
			}
		});
        
        /* stopService的OnClickListener事件,关闭service */
        stopService.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {
				/* 停止service */
				stopService(intent);
				
			}
		});
        
        /* 邦定service */
        bindService.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {
				/* 绑定service , bindService(); */
				bindService(intentForData, conn, Service.BIND_AUTO_CREATE);
				
			}
		});
        
        /* 解除绑定 */
        unbindService.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {
				/* 解绑service,unbindService()  */
				unbindService(conn);		
			}
		});
        
        /* 获取数据 */
        getData.setOnClickListener(new OnClickListener() {
			
        	/* 查看从service中或得到的数据 */
			public void onClick(View v) {
				Toast.makeText(MainActivity.this, ""+binder.getCount(), 1000).show();
				
			}
		});
        
    }


    
}


service代码部分:
package com.example.service;
import android.R;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.util.Log;

/* 创建自己的service , 要继承Service这个类; *//* 测试启动过程  */
public class MyService extends Service {

	/* 声明一个媒体对象 */
	private	MediaPlayer mediaPlayer ;

	/* 当用户显示的call startService之后首先调用 */
	/* 创建service */
	public void onCreate() {
		super.onCreate();
		
		/* service创建的时候就获取MediaPlayer的对象 *//* 参1:上下文对象;参2:音乐文件资源ID*/
//		mediaPlayer = MediaPlayer.create(this, 2);
		
		Log.i("MyService", "onCreate()..创建service..");
	}

	/* 启动service  */
	public void onStart(Intent intent, int startId) {
		super.onStart(intent, startId);
		
		/* service启动的时候打开音乐 */
//		mediaPlayer.start();
		Log.i("MyService", "onStart()..开始service..");
	}

	/* 停止服务 */
	public void onDestroy() {
		super.onDestroy();
		/* service停止的时候关闭音乐 */
//		mediaPlayer.stop();
		Log.i("MyService", "onDestroy()..停止service..");
	}

	/* 绑定服务 */
	public IBinder onBind(Intent intent) {
		return null;
	}
}


service与activity进行数据交互:
package com.example.service;

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

/* 测试访问service中的数据 *//* 案例:获取该服务中变量的值  */
/*  需要实现方法:onBind(); onUnbind(); onCreate(); onDestroy(); */

public class MyServiceForData extends Service {
	
	/* service中的变量  */
	private int count = 0 ; 
	private boolean flags;
	
	/* 创建MyBinder对象,用于onBind()方法返回一个Binder对象 */
	MyBinder myBinder = new MyBinder();
	
	/* 内部类:创建一个类MyBinder, 继承Binder */
	public class MyBinder extends Binder{
		/* 该内默认有个无参的构造方法 */
		public MyBinder(){}
		
		/* 获取count的值 */
		public int getCount(){
			return count;
		}
	}

	/* 创建service */
	public void onCreate() {
		super.onCreate();
		Log.i("MyServiceForData", "onCreate()...创建service..");
		
		/* service创建时,启动一个线程,用于完成对count值的改变 */
		new Thread(){
			/* run()方法里面程序就时现成执行的程序; *//*  该现成用于改变count的值 */
			public void run(){
				super.run();
				while(!flags){
					count++;
				}
			}
		}.start();
		
	}

	/* 绑定service */
	public IBinder onBind(Intent intent) {
		Log.i("MyServiceForData", "onBind()...绑定service..");

		return myBinder;
	}

	/* 解绑service */
	public boolean onUnbind(Intent intent) {
		Log.i("MyServiceForData", "onUnbind()...解绑service..");
		return super.onUnbind(intent);
	}
	
	/* 停止service */
	public void onDestroy() {
		super.onDestroy();
		Log.i("MyServiceForData", "onDestroy()...停止service..");
	}

}



  • 大小: 80.4 KB
0
0
分享到:
评论

相关推荐

    Android 之 Service服务介绍

    NULL 博文链接:https://sunzone.iteye.com/blog/1998116

    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与Activity传值

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

    Android服务Service详解

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

    Android 远程服务(remote service)

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

    Android防止service多次执行startCommand

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

    Android学习之Service练习

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

    QT for Android下Service的创建

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

    Android服务Service_详解.pdf

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

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

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

    Android local service demo

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

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

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

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

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

    Android Service之bound实现

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

    android_service服务器

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

    如何创建android系统服务

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

    android 服务 Service PendingIntent 通知

    在Android应用开发中,服务(Service)是一种在后台运行的组件,它不具有用户界面,但可以执行长时间的任务,如播放音乐、网络通信等。Service生命周期中的关键方法包括`onStartCommand()`和`onBind()`,前者用于...

    android 录音机 service 例子

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

Global site tag (gtag.js) - Google Analytics