概念:
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以及如何开发适合各种机器的应用程序,分析Android框架所需的基础知识,JNI(Java Native Interface)与Binder基础知识,Zygote、Service Manager、Service Server等Android核心组件,Android服务框架的...
第一部份 Android的入门基础 第二部份 Android应用核心基础知识 第三部份 理解Activity 第四部份 用户界面 第五部份 Service 第六部份 BroadCast Receiver 第七部份 数据存储 第八部份 数据库操作
移植android以及如何开发适合各种机器的应用程序,分析android框架所需的基础知识,jni(java native interface)与binder基础知识,zygote、service manager、service server等android核心组件,android服务框架的...
本书内容上涵盖了用android开发的大部分场景,从android基础介绍、环境搭建、sdk介绍、market使用,到应用剖析、组件介绍、实例演示等方面。从技术实现上,讲解了5个android平台下的完整综合实例及源代码分析,...
移植android以及如何开发适合各种机器的应用程序,分析android框架所需的基础知识,jni(java native interface)与binder基础知识,zygote、service manager、service server等android核心组件,android服务框架的...
移植Android以及如何开发适合各种机器的应用程序,分析Android框架所需的基础知识,JNI(Java Native Interface)与Binder基础知识,Zygote、Service Manager、Service Server等Android核心组件,Android服务框架的...
专业入门培训班ppt,内容涵盖Android开发知识点:Android开发环境的搭建(androidstudio+ gradle +jdk1.8) Android框架 Android 四大组件: Activity、Service、Content Provider、BroadcastReceiver UI及基本布局 ...
本书系统讲解了Android软件开发的基础知识,图文并茂地帮助读者学习和掌握SDK、开发流程以及常用的API等。书中以讲述实战实例为导向,用一个个典型应用生动地引领读者进行项目开发实践。作为一本既及时、又翔实、...
移植Android以及如何开发适合各种机器的应用程序,分析Android框架所需的基础知识,JNI(Java Native Interface)与Binder基础知识,Zygote、Service Manager、Service Server等Android核心组件,Android服务框架的...
移植android以及如何开发适合各种机器的应用程序,分析android框架所需的基础知识,jni(java native interface)与binder基础知识,zygote、service manager、service server等android核心组件,android服务框架的...
三位作者展示出他们在移动开发领域所积累的经验,并运用他们对Android技术文档的深入理解,从,Android平台的基础知识讲起,再逐步深入到构建Android应用程序所需的基本技能,最后结合示例介绍了如何创建比较复杂的...
6 1 SQLite基础知识 6 2 SQLite 函数 6 2 1 核心函数 6 2 2 日期和时间函数 6 2 3 聚合函数 6 3 在Android中使用SQLite 6 4 面向对象数据库:db4o 第7章 网络与加密 7 1 客户端Socket 7 2 服务端Socket 7 3 非阻塞I ...
第1篇android开发基础主要介绍了android系统的发展史、基本组件、android开发环境的搭建、android布局、android基本控件、android高级控件、android辅助功能、activity和intent、service与broadcastreceiver、...
1.通过本课程设计的实践及其前后的准备与总结,复习、领会、巩固和运用课堂上所学的Android手机应用开发知识。 2.为学生综合应用本专业所学习的多门课程知识(例如,软件工程、数据库、Java语言、Java Web开发等)...
关于startService的基本使用概述及其生命周期可参见《Android中startService基本使用方法概述》。 本文通过播放背景音乐的简单示例,演示startService的基本使用流程,具体内容如下 系统界面如下: 界面上面就两...
1.1 基础知识 1 1.1.1 Android开发系统的由来 1 1.1.2 移动电话系统开发模式 2 1.1.3 未来移动电话的功能及Android的优势 4 1.2 Android的开发工作 6 1.2.1 Android移植开发 6 1.2.2 Android应用开发 ...
JAVA基础知识点总结.doc 第1章 Java程序设计概述 第2章 Java语言的开发环境 第3章 Java程序的基本结构 第4章 对象和类 第5章 继承和多态 第6章 泛型程序设计 第7章 接口和内部类 第8章 异常处理 第9章 反射,代理,...
本书共8章,第1章介绍了一个非典型的并发模型...如果你是一名新手,建议你在掌握相关入门知识的基础上阅读本书,以达到更好的学习效果。本书给出多段代码,旨在让读者亲自实践后更好地掌握Android并发开发的相关内容。
APK权限大全 - Android必懂知识 最无私的Android资料(书籍+代码)分享[总结] Android中文帮助教程(非常合适新手入门) android程序编写及调试新手入门 大家一起学Android(Windows篇) android入门与提高必看指南 ...