Android笔记二十七.Service组件入门(一).什么是Service?
系统中的一种组件,它们都是从Context派生出来的,可是它不能自己执行,仅仅能在后台执行。而且能够和其它组件进行交互。
它须要通过某一个Activity或者其它Context对象来调用。
须要注意的是,Service不是一个单独的进程或为了防止应用出现无反应错误单独的线程,它像其它应用对象一样执行在其托管进程的主线程中。
当然,假设我们希望自己的Service能够在后台执行MP3或者网络下载,我们能够创建一个线程来实现。

2.Service的生命周期
调用Context.startService()触发的Service生命周期方法:
Context.stopService()或 stopSelf()->onDestory()->Service被关闭
调用Context.startService()触发的Service生命周期方法:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjYzNzUwMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="340" height="415" alt="" style="background-color:inherit; display:inline-block; margin-top:8px; width:340.12476007677543px; height:415px">
升华笔记1:
int, int)方法;
3.API-Service
OnCreate():当该Service第一次被创建后将马上被调用。
int onStartCommand(Intent intent, int flags, int startId):每次client调用startService(Intent intent)方法启动该Service时都会回调该方法。
abstract boolean stopService (Intent service):client调用该方法关闭Service
final void stopSelf ():Service自己主动关闭
abstract IBinder onBind (Intent intent):该方法是Service子类必须实现的方法,其返回一个IBinder对象,client应用程序可通过该对象与Service组件通信。參数Intent对象用于将client绑定到Service,传递给Context.bindService。
onUnbind(Intent intent):当该Service上绑定的全部client都断开链接时将会调用该方法
onDestory():当该Service被关闭之前将会调用该方法。Service将会清理其占有的全部资源(包含全部线程、注冊在Service上的接受者)。
也就是说当调用bindService()的组件销毁了,那么它绑定的Service也跟着被结束。
public class FirstService extends Service
{
/*a.必须实现的方法,返回一个IBinder对象给client以便实现通信
* 因为我们调用startService方法启动一个Servie,无需与client(组件)绑定,因此,返回为null.
*/
@Override
public IBinder onBind(Intent arg0)
{
return null;
}
/*b.Service被创建时回调该方法*/
@Override
public void onCreate()
{
super.onCreate();
System.out.println("Service is Created");
}
/*c.Service被启动时回调该方法*/
@Override
public int onStartCommand(Intent intent,int flags,int startId)
{
Sytem.out.println("Service is Started");
return START_STICKY;
}
/*d.Service被关闭之前回调*/
@Override
public void onDestroy()
{
super.onDestroy();
System.out.println("Service is Destroyed");
}
}
2.在AndroidManifest.xml文件里配置该Service
与配置Activity相似的是,配置Service时也可为<service../>元素配置<intent-filter../>子元素。用于说明该Service可被哪些Intent启动。
<!--配置一个Service组件-->
<service
android:name=".FirstService">
<intent-filter>
<!--为该service组件的intent-filter配置action-->
<action android:name="com.example.service.FIRST_SERVICE"/>
</intent-filter>
</service>
所以,开发Service类似于开发Activity,我们仅仅需定义一个继承Service的子类而且在AndroidManifest.xml文件里配置该Service后,就能在程序中执行该Serviec。
怎样启动一个Service呢?我们能够在本应用的Activity子类中通过Context.startService()方法或Context.bindService()方法启动一个service,也能够在还有一个应用的Activity子类中通过Context.startService()方法或Context.bindService()方法启动这个service.
3.启动和停止Service
intent)方法。
public class StartServiceTest extends Activity
{
Button start,stop;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//获取程序界面button中的start、stop两个button
start = (Button) findViewById(R.id.start);
stop = (Button) findViewById(R.id.stop);
//创建启动Service的Intent
final Intent intent = new Intent();
//为Intent设置Action属性
intent.setAction("com.example.service.FIRST_SERVICE");
start.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0)
{
//启动指定Service
startService(intent);
}
});
stop.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0)
{
//关闭指定Service
stopService(intent);
}
});
}
}
Android笔记二十七.Service组件入门(一).什么是Service?的更多相关文章
- Android笔记(十七) Android中的Service
定义和用途 Service是Android的四大组件之一,一直在后台运行,没有用户界面.Service组件通常用于为其他组件提供后台服务或者监控其他组件的运行状态,例如播放音乐.记录地理位置,监听用户 ...
- android笔记:获取View组件宽度以及ViewTreeObserver
View宽高测量方法: 测量方法有三种,如下: 1)(直接在onCreate()执行) int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureS ...
- Android笔记二十四.Android基于回调的事件处理机制
假设说事件监听机制是一种托付式的事件处理,那么回调机制则与之相反,对于基于回调的事件处理模型来说,事件源和事件监听器是统一的,或者说事件监听器全然消失了,当用户在GUI控件上激发某个事件时,控 ...
- Android进阶(二十七)Android原生扰人烦的布局
Android原生扰人烦的布局 在开发Android应用时,UI布局是一件令人烦恼的事情.下面主要讲解一下Android中的界面布局. 一.线性布局(LinearLayout) 线性布局分为: (1) ...
- Android笔记(六十七) 自定义控件
实际编程中,系统提供的控件往往无法满足我们的需求,一来是样子丑陋,二来是一些复杂的组合需要多次使用的话,每次都写一堆控件的组合会很耗费时间,所以我们将这些组件的组合自定义为一个新的控件,以后使用的时候 ...
- Java基础学习笔记二十七 DBUtils和连接池
DBUtils 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC开发,本案例我们讲采用apache commons组件一个成员:DBUtils.DBUtils就是JDBC的简化开发 ...
- 论文阅读笔记二十七:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks(CVPR 2016)
论文源址:https://arxiv.org/abs/1506.01497 tensorflow代码:https://github.com/endernewton/tf-faster-rcnn 室友对 ...
- 多线程学习笔记二之JUC组件
目录 概述 JUC锁框架图 使用内置锁还是JUC显示锁? 概述 为了对共享资源提供更细粒度的同步控制,JDK5新增了java.util.concurrent(JUC)并发工具包,并发包新增了Loc ...
- Java学习笔记二十七:Java中的抽象类
Java中的抽象类 一:Java抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就 ...
随机推荐
- 幻世(OurDream)2D图形引擎使用教程8——处理操作输入(2)
声明:本教程版权归Lizcst Software Lab所有,欢迎转载,但是转载必须保留本段声明文字,并注明文章来源:http://blog.csdn.net/kflizcst 谢谢合作! 今天的教程 ...
- 工作线程AfxBeginThread的使用
工作线程通常用来执行一些后台任务,如:数据计算.后台杀毒等等.因为不需要创建窗口和处理用户消息,编写比较容易,在程序中只要调用AfxBeginThread 函数就可以创建并启动一个工作线程了. Afx ...
- nest expression & Pyparsing
http://pyparsing.wikispaces.com/ http://bbs.csdn.net/topics/330052586 C++ boost "<([^<> ...
- Swift - 使用Media Player播放本地视频,在线视频
Media Player框架用于播放本地视频.音频,也可以在线播放视频和音频. 1,播放器MPMovieControlStyle样式有如下几种: (1)None: 没有播放控制控件 (2)Embedd ...
- 原码、反码、补码和移码事实上非常easy
近期在备战软考,复习到计算机组成原理的时候,看到书中关于原码.反码.补码和移码的定义例如以下(n是机器字长): 原码: 反码: 补码: 移码: 看完这些定义以后,我的脑袋瞬间膨胀到原来的二倍!这样变态 ...
- [hadoop系列]Pig的安装和简单演示样例
inkfish原创,请勿商业性质转载,转载请注明来源(http://blog.csdn.net/inkfish ).(来源:http://blog.csdn.net/inkfish) Pig是Yaho ...
- Java面试题精选(一)基础概念和面向对象
-- 基础概念和面向对象 -- 全程将为大家剖析几大部分内容,由于学习经验有限,望大家谅解并接受宝贵的意见: 基础概念部分 ★★ : 常出现的高频率单词的区别理解(异常. ...
- 找到程序真正的入口(使用IDE追踪)
一.程序的真正入口 main或WinMain只是“语法规定的程序入口” 并不是“应用程序入口”. 我们使用VC++ 6.0 的栈回溯功能,找到main函数之前的代码.菜单View -> Debu ...
- Microsoft office PPT 2007 保存时速度慢(整理自网上)
问题描述: XP sp3上运行PPT2007,当需要保存文件时,发现竟然需要近1分钟才能保存完毕,其间可能会出现“瘟都死沙漏”来提示你正在保存. 这简直慢到过分慢到无法容忍,一开始以为是ppt文件过大 ...
- Mac 安装工具包brew
linux有命令行工具 apt-get ,Mac 下也有类似的brew 也就是HomeBrew 网址:http://brew.sh/index_zh-cn.html 可以看到mac安装的时候只需要执行 ...