概念:
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>当执行“卸载服务”时,打印信息如下:
相关推荐
综上所述,"android service下载资源,同时解压资源"这一功能实现涉及到了Android Service、异步下载、BroadcastReceiver、ZIP文件解压等多个技术点,这些知识点在实际的Android应用开发中都非常常见且重要。...
本篇将详细介绍Android Service的源码学习及其关键知识点。 首先,我们来了解Service的基本生命周期。在Android中,Service的启动与绑定是通过`startService()`和`bindService()`方法完成的。当调用`startService()...
Android服务(Service)是Android操作系统中四个核心应用程序组件之一,其他三个分别是Activity、...通过深入学习Service组件的这些知识点,开发者可以有效地利用Service来丰富Android应用的功能和用户体验。
下面我们将深入探讨Android远程服务的相关知识点。 **一、Android服务基础** 在理解远程服务之前,我们首先需要了解Android服务的基本概念。服务(Service)是Android四大组件之一,它在后台执行任务,不与用户...
AIDL(Android Interface Definition Language)是Android系统提供的一种接口定义语言,用于在不同进程间进行通信,特别是当服务(Service)需要与客户端(如Activity)跨进程交互时。AIDL帮助开发者定义接口,使得...
以上只是对Android开发中一些基础和关键知识点的概述,实际开发中还需要深入学习更多高级主题,如Fragment、服务(Service)、广播接收器(BroadcastReceiver)、通知(Notification)、数据库(SQLite)、异步任务...
首先,Service的基本使用流程包括创建Service类、在AndroidManifest.xml中声明Service、启动和停止Service。创建自定义Service时,需要继承自Android的Service类,并重写onStartCommand()或onBind()方法。...
在Android系统中,Service是一种可以在后台长时间运行的组件,它不提供...以上就是关于Android开机自启动Service的实现细节,理解并掌握这些知识点对于开发者来说至关重要,特别是在设计需要在后台持续运行的应用时。
在"android中service组件自我学习练习"中,我们可能涉及到以下几个关键知识点: 1. **Service的声明**:在AndroidManifest.xml文件中,需要声明Service组件,指定其类名,以便系统能够识别和加载。 2. **Service的...
本文将深入探讨“Android Service Test”中涉及的两个关键知识点:本地服务(Local Service)和远程服务(Remote Service)。 一、本地服务(Local Service) 本地服务是在同一个应用程序中运行的服务,主要用来在...
一、Service的基本概念 Service是Android系统中的一个特殊组件,它可以在后台运行,不与用户界面直接交互。Service可以启动(Start)或绑定(Bind),两种方式各有特点。启动Service时,服务会持续运行直到被显式...
在Android开发领域,掌握基本知识是构建高效应用的基石。本文将深入探讨Android的基本概念、控件使用以及一些关键特性。 首先,让我们从【第1章 Android开发基础】开始。Android是一个开源的操作系统,主要应用于...
以上就是Android中使用AIDL进行远程Service调用的基本步骤。在这个过程中,我们定义了AIDL接口,实现了Parcelable接口,创建了远程Service,并在客户端进行了绑定和调用。文件`ServiceTest`可能包含了完整的示例代码...
我们将深入探讨Service的基本概念、生命周期、启动方式以及如何在Activity和服务之间通信。 1. Service基础: Service组件主要负责执行长时间运行的任务,如播放音乐、网络通信等。它不同于Activity,没有用户界面...
首先,我们来看一下标题"Android Gpio service"。这个标题表明我们要讨论的是Android系统中的GPIO服务,这是一个用于处理GPIO操作的服务。在Android系统中,GPIO服务通常由HAL实现,使得上层应用程序可以通过标准的...
### Android系统中的SensorService知识点详解 #### 一、整体架构概览 在Android系统中,SensorService是一个重要的组件,主要用于管理设备上的各种传感器,并提供给应用程序接口以获取这些传感器的数据。这一节...
在后续的《androidservice学习(下)》中,将探讨通过AIDL实现Service的远程调用,进一步扩展Service的功能性和灵活性,实现跨进程通信。这一部分将深入讲解AIDL的基本概念、配置过程及其实现细节,为开发者提供更全面...
为了更好地理解和掌握Android应用开发的基本原理和技术,以下是对Android基础知识的一个系统性总结。 #### 一、Android四大组件 Android应用程序主要由四大组件构成:`Activity`、`Service`、`BroadcastReceiver` ...
在Android开发领域,基本知识是构建高质量应用的基础。这个"android的基本知识的demo"压缩包很可能是为了教学或自我学习目的而设计的,它包含了Android开发的一些基础特效的实例代码。下面,我们将深入探讨Android...