`
shenjichao2009
  • 浏览: 96341 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android Service基本知识

 
阅读更多

概念:

Service是应用组件(运行在宿主进程的主线程中,或重新开启一个子线程),执行长时间运行操作,或为其它应用提供功能函数,每个Service必须在工程的AndroidManifest.xml中进行声明,开启Service以Context.startService()或Context.bindService()方式。

生命周期:



 

 

=========MainActivity.java==============

package com.xuwan.service;

 

import android.app.Activity;

import android.content.ComponentName;

import android.content.Context;

import android.content.Intent;

import android.content.ServiceConnection;

import android.os.Bundle;

import android.os.IBinder;

import android.util.Log;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

 

/**

 * 本地Service

 * 

 * @author SJC

 * 

 */

public class MainActivity extends Activity implements OnClickListener {

private static String tag = "MainActivity";

 

private LocalService localService = null;

private Boolean isBind = false;

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

 

Button startServiceButton = (Button) findViewById(R.id.startService);

Button stopServiceButton = (Button) findViewById(R.id.stopService);

Button bindServiceButton = (Button) findViewById(R.id.bindService);

Button unbindServiceButton = (Button) findViewById(R.id.unbindService);

startServiceButton.setOnClickListener(this);

stopServiceButton.setOnClickListener(this);

bindServiceButton.setOnClickListener(this);

unbindServiceButton.setOnClickListener(this);

}

 

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

 

@Override

public void onClick(View v) {

if (v.getId() == R.id.startService) {

Log.i(tag, "==========启动服务==========");

Intent service = new Intent(this, LocalService.class);

startService(service);

} else if (v.getId() == R.id.stopService) {

Log.i(tag, "==========ֹͣ停止服务==========");

Intent service = new Intent(this, LocalService.class);

stopService(service);

} else if (v.getId() == R.id.bindService) {

Log.i(tag, "==========ֹͣ绑定服务==========");

Intent service = new Intent(this, LocalService.class);

bindService(service, serviceConnection, Context.BIND_AUTO_CREATE);

isBind = true;

} else if (v.getId() == R.id.unbindService) {

Log.i(tag, "==========ֹͣ卸载服务==========");

if (isBind) {

unbindService(serviceConnection);

isBind = false;

}

}

}

 

private ServiceConnection serviceConnection = new ServiceConnection() {

 

@Override

public void onServiceDisconnected(ComponentName name) {

Log.i(tag, "onServiceDisconnected===" + "name:" + name);

localService = null;

}

 

@Override

public void onServiceConnected(ComponentName name, IBinder service) {

Log.i(tag, "onServiceConnected===" + "name:" + name);

localService = ((LocalService.LocalBinder) service)

.getLocalService();

}

};

 

}

 

 

=========LocalService.java==============

/**

 * 

 */

package com.xuwan.service;

 

import android.app.Service;

import android.content.Intent;

import android.media.MediaPlayer;

import android.os.Binder;

import android.os.IBinder;

import android.util.Log;

 

/**

 * @author SJC

 * 

 */

public class LocalService extends Service {

private static String tag = "LocalService";

private Binder binder = new LocalService.LocalBinder();

private MediaPlayer mp = null;

 

@Override

public IBinder onBind(Intent intent) {

Log.i(tag, "onBind");

return binder;

}

 

@Override

public void onCreate() {

Log.i(tag, "onCreate");

mp = MediaPlayer.create(this, R.raw.dongshi_sunyanzi);

mp.start();

super.onCreate();

}

 

@Override

public void onStart(Intent intent, int startId) {

Log.i(tag, "onStart");

super.onStart(intent, startId);

}

 

/**

* <1>START_CONTINUATION_MASK<br/>

* <2>START_FLAG_REDELIVERY<br/>

* <3>START_FLAG_RETRY<br/>

* <4>START_NOT_STICKY 如果进程被kill掉,系统将不会自动重新该Service<br/>

* <5>START_REDELIVER_INTENT

* 如果进程被kill掉,保留Service的状态和intent对象,随后系统会自动重启Service<br/>

* <6>START_STICKY 如果进程被kill掉,保留Service的状态为开始状态,但不会保留传递的intent对象;

* 随后系统会自动重启Service<br/>

* <7>START_STICKY_COMPATIBILITY START_STICKY的兼容版本,

* 并不能保证进程被kill掉后会调用onStartCommand()方法<br/>

*/

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

Log.i(tag, "onStartCommand" + "|" + "flags:" + flags + "|" + "startId:"

+ startId);

return START_STICKY;

}

 

@Override

public boolean onUnbind(Intent intent) {

Log.i(tag, "onUnbind");

return super.onUnbind(intent);

}

 

@Override

public void onDestroy() {

Log.i(tag, "onDestroy");

mp.stop();

super.onDestroy();

}

 

public class LocalBinder extends Binder {

LocalService getLocalService() {

return LocalService.this;

}

}

 

}

 

<1>当执行“启动服务”时,打印信息如下:



 

<2>当执行“停止服务”时,打印信息如下:



 

<3>当执行“绑定服务”时,打印信息如下:



 

<4>当执行“卸载服务”时,打印信息如下:



 

  • 大小: 12.4 KB
  • 大小: 9 KB
  • 大小: 23.7 KB
  • 大小: 17.2 KB
  • 大小: 28.4 KB
  • 大小: 23.5 KB
分享到:
评论

相关推荐

    android service下载资源,同时解压资源

    综上所述,"android service下载资源,同时解压资源"这一功能实现涉及到了Android Service、异步下载、BroadcastReceiver、ZIP文件解压等多个技术点,这些知识点在实际的Android应用开发中都非常常见且重要。...

    android service 源码

    本篇将详细介绍Android Service的源码学习及其关键知识点。 首先,我们来了解Service的基本生命周期。在Android中,Service的启动与绑定是通过`startService()`和`bindService()`方法完成的。当调用`startService()...

    Android服务Service_详解.pdf

    Android服务(Service)是Android操作系统中四个核心应用程序组件之一,其他三个分别是Activity、...通过深入学习Service组件的这些知识点,开发者可以有效地利用Service来丰富Android应用的功能和用户体验。

    Android 远程服务(remote service)

    下面我们将深入探讨Android远程服务的相关知识点。 **一、Android服务基础** 在理解远程服务之前,我们首先需要了解Android服务的基本概念。服务(Service)是Android四大组件之一,它在后台执行任务,不与用户...

    aidl.rar_AIDL_AIDL.rar_android AIDL service_android service_andr

    AIDL(Android Interface Definition Language)是Android系统提供的一种接口定义语言,用于在不同进程间进行通信,特别是当服务(Service)需要与客户端(如Activity)跨进程交互时。AIDL帮助开发者定义接口,使得...

    Android入门到精通知识总结.pdf

    以上只是对Android开发中一些基础和关键知识点的概述,实际开发中还需要深入学习更多高级主题,如Fragment、服务(Service)、广播接收器(BroadcastReceiver)、通知(Notification)、数据库(SQLite)、异步任务...

    Android中Service组件的使用

    首先,Service的基本使用流程包括创建Service类、在AndroidManifest.xml中声明Service、启动和停止Service。创建自定义Service时,需要继承自Android的Service类,并重写onStartCommand()或onBind()方法。...

    【Android】开机自启动Service

    在Android系统中,Service是一种可以在后台长时间运行的组件,它不提供...以上就是关于Android开机自启动Service的实现细节,理解并掌握这些知识点对于开发者来说至关重要,特别是在设计需要在后台持续运行的应用时。

    android中service组件自我学习练习

    在"android中service组件自我学习练习"中,我们可能涉及到以下几个关键知识点: 1. **Service的声明**:在AndroidManifest.xml文件中,需要声明Service组件,指定其类名,以便系统能够识别和加载。 2. **Service的...

    Android Service Test

    本文将深入探讨“Android Service Test”中涉及的两个关键知识点:本地服务(Local Service)和远程服务(Remote Service)。 一、本地服务(Local Service) 本地服务是在同一个应用程序中运行的服务,主要用来在...

    android service使用详解

    一、Service的基本概念 Service是Android系统中的一个特殊组件,它可以在后台运行,不与用户界面直接交互。Service可以启动(Start)或绑定(Bind),两种方式各有特点。启动Service时,服务会持续运行直到被显式...

    android的基本知识

    在Android开发领域,掌握基本知识是构建高效应用的基石。本文将深入探讨Android的基本概念、控件使用以及一些关键特性。 首先,让我们从【第1章 Android开发基础】开始。Android是一个开源的操作系统,主要应用于...

    Android 远程Service调用实例

    以上就是Android中使用AIDL进行远程Service调用的基本步骤。在这个过程中,我们定义了AIDL接口,实现了Parcelable接口,创建了远程Service,并在客户端进行了绑定和调用。文件`ServiceTest`可能包含了完整的示例代码...

    android的关于service的小Demo

    我们将深入探讨Service的基本概念、生命周期、启动方式以及如何在Activity和服务之间通信。 1. Service基础: Service组件主要负责执行长时间运行的任务,如播放音乐、网络通信等。它不同于Activity,没有用户界面...

    Android Gpio service

    首先,我们来看一下标题"Android Gpio service"。这个标题表明我们要讨论的是Android系统中的GPIO服务,这是一个用于处理GPIO操作的服务。在Android系统中,GPIO服务通常由HAL实现,使得上层应用程序可以通过标准的...

    android 系统sensorservice 介绍

    ### Android系统中的SensorService知识点详解 #### 一、整体架构概览 在Android系统中,SensorService是一个重要的组件,主要用于管理设备上的各种传感器,并提供给应用程序接口以获取这些传感器的数据。这一节...

    android service 学习(上)

    在后续的《androidservice学习(下)》中,将探讨通过AIDL实现Service的远程调用,进一步扩展Service的功能性和灵活性,实现跨进程通信。这一部分将深入讲解AIDL的基本概念、配置过程及其实现细节,为开发者提供更全面...

    android基本知识点总结

    为了更好地理解和掌握Android应用开发的基本原理和技术,以下是对Android基础知识的一个系统性总结。 #### 一、Android四大组件 Android应用程序主要由四大组件构成:`Activity`、`Service`、`BroadcastReceiver` ...

    android的基本知识的demo

    在Android开发领域,基本知识是构建高质量应用的基础。这个"android的基本知识的demo"压缩包很可能是为了教学或自我学习目的而设计的,它包含了Android开发的一些基础特效的实例代码。下面,我们将深入探讨Android...

Global site tag (gtag.js) - Google Analytics