`
shenjichao2009
  • 浏览: 94169 次
  • 性别: 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框架揭秘.pdf

    移植Android以及如何开发适合各种机器的应用程序,分析Android框架所需的基础知识,JNI(Java Native Interface)与Binder基础知识,Zygote、Service Manager、Service Server等Android核心组件,Android服务框架的...

    Android开发入门经典

    第一部份 Android的入门基础 第二部份 Android应用核心基础知识 第三部份 理解Activity 第四部份 用户界面 第五部份 Service 第六部份 BroadCast Receiver 第七部份 数据存储 第八部份 数据库操作

    ANDROID框架揭秘.pdf下载高清完整扫描版

    移植android以及如何开发适合各种机器的应用程序,分析android框架所需的基础知识,jni(java native interface)与binder基础知识,zygote、service manager、service server等android核心组件,android服务框架的...

    《Google Android开发入门与实战》.pdf

     本书内容上涵盖了用android开发的大部分场景,从android基础介绍、环境搭建、sdk介绍、market使用,到应用剖析、组件介绍、实例演示等方面。从技术实现上,讲解了5个android平台下的完整综合实例及源代码分析,...

    [Android框架揭秘].金泰延等.扫描版

    移植android以及如何开发适合各种机器的应用程序,分析android框架所需的基础知识,jni(java native interface)与binder基础知识,zygote、service manager、service server等android核心组件,android服务框架的...

    ANDROID框架揭秘-加书签

    移植Android以及如何开发适合各种机器的应用程序,分析Android框架所需的基础知识,JNI(Java Native Interface)与Binder基础知识,Zygote、Service Manager、Service Server等Android核心组件,Android服务框架的...

    Android入门基础培训.pptx

    专业入门培训班ppt,内容涵盖Android开发知识点:Android开发环境的搭建(androidstudio+ gradle +jdk1.8) Android框架 Android 四大组件: Activity、Service、Content Provider、BroadcastReceiver UI及基本布局 ...

    Google.Android开发入门与实战

    本书系统讲解了Android软件开发的基础知识,图文并茂地帮助读者学习和掌握SDK、开发流程以及常用的API等。书中以讲述实战实例为导向,用一个个典型应用生动地引领读者进行项目开发实践。作为一本既及时、又翔实、...

    ANDROID框架揭秘

    移植Android以及如何开发适合各种机器的应用程序,分析Android框架所需的基础知识,JNI(Java Native Interface)与Binder基础知识,Zygote、Service Manager、Service Server等Android核心组件,Android服务框架的...

    Android框架揭秘

    移植android以及如何开发适合各种机器的应用程序,分析android框架所需的基础知识,jni(java native interface)与binder基础知识,zygote、service manager、service server等android核心组件,android服务框架的...

    Google Android揭秘.pdf

    三位作者展示出他们在移动开发领域所积累的经验,并运用他们对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 ...

    《零点起飞学Android开发》 PDF

    第1篇android开发基础主要介绍了android系统的发展史、基本组件、android开发环境的搭建、android布局、android基本控件、android高级控件、android辅助功能、activity和intent、service与broadcastreceiver、...

    android开发期末大作业.zip

    1.通过本课程设计的实践及其前后的准备与总结,复习、领会、巩固和运用课堂上所学的Android手机应用开发知识。 2.为学生综合应用本专业所学习的多门课程知识(例如,软件工程、数据库、Java语言、Java Web开发等)...

    Android通过startService播放背景音乐

    关于startService的基本使用概述及其生命周期可参见《Android中startService基本使用方法概述》。 本文通过播放背景音乐的简单示例,演示startService的基本使用流程,具体内容如下 系统界面如下: 界面上面就两...

    android系统原理及开发要点详解

     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应用开发 ...

    android知识大总结【邯院】

    JAVA基础知识点总结.doc 第1章 Java程序设计概述 第2章 Java语言的开发环境 第3章 Java程序的基本结构 第4章 对象和类 第5章 继承和多态 第6章 泛型程序设计 第7章 接口和内部类 第8章 异常处理 第9章 反射,代理,...

    Android并发开发

    本书共8章,第1章介绍了一个非典型的并发模型...如果你是一名新手,建议你在掌握相关入门知识的基础上阅读本书,以达到更好的学习效果。本书给出多段代码,旨在让读者亲自实践后更好地掌握Android并发开发的相关内容。

    android开发资料大全

    APK权限大全 - Android必懂知识 最无私的Android资料(书籍+代码)分享[总结] Android中文帮助教程(非常合适新手入门) android程序编写及调试新手入门 大家一起学Android(Windows篇) android入门与提高必看指南 ...

Global site tag (gtag.js) - Google Analytics