与activity类似,服务也存在生命周期回调方法,你可以实现这些方法来监控服务的状态变化,并在适当的时机执行一些操作。 以下代码提纲展示了服务的每个生命周期回调方法:

public class ExampleService extends Service {
int mStartMode; // 标识服务被杀死后的处理方式
IBinder mBinder; // 用于客户端绑定的接口
boolean mAllowRebind; // 标识是否使用onRebind @Override
public void onCreate() {
// 服务正被创建
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// 服务正在启动,由startService()调用引发
return mStartMode;
}
@Override
public IBinder onBind(Intent intent) {
// 客户端用bindService()绑定服务
return mBinder;
}
@Override
public boolean onUnbind(Intent intent) {
// 所有的客户端都用unbindService()解除了绑定
return mAllowRebind;
}
@Override
public void onRebind(Intent intent) {
// 某客户端正用bindService()绑定到服务,
// 而onUnbind()已经被调用过了
}
@Override
public void onDestroy() {
// 服务用不上了,将被销毁
}
}

代码实例:

LocalService.java

package com.app.servicetest;

import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.util.Log;
import android.widget.Toast; public class LocalService extends Service {
boolean flag = true;
int count=0;
@Override//创建一个服务 继承自Service 重写 onBind方法
public IBinder onBind(Intent arg0) {
// 不支持绑定,所以返回null
return null;
}
//创建Hander
Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
Toast.makeText(LocalService.this, count+"", Toast.LENGTH_SHORT).show();
};
};
@Override
public void onCreate() {
super.onCreate();
new Thread(new Runnable() { @Override
public void run() {
while(flag){
try {
Log.d("--------------", count+" ");
Message msg = new Message();
handler.sendMessage(msg);
count++;
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start() ;
} @Override
public void onDestroy() {
Toast.makeText(this, "service done", Toast.LENGTH_SHORT).show();
flag = false;
super.onDestroy();
}
}

MainActivity.java

package com.app.servicetest;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast; public class MainActivity extends Activity {
Intent intent ;
Button button_start,button_stop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); button_start = (Button) findViewById(R.id.button1);
button_stop = (Button) findViewById(R.id.button2); button_start.setText("创建服务");
button_stop.setText("Stop"); button_start.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View arg0) {
intent = new Intent(MainActivity.this, LocalService.class);
//启动服务
startService(intent);
Toast.makeText(MainActivity.this, "启动", 0).show();
} });
button_stop.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View arg0) {
//停止 服务
stopService(intent);
Toast.makeText(MainActivity.this, "Stop", 0).show();
}
});
}
}

Android Service服务的生命周期的更多相关文章

  1. Android四大组件之Service --- 服务的生命周期

    一旦在项目的任何位置调用了Context的startService() 方法,相应的服务就会启动起来,并回调onStartCommand() 方法.如果这个服务之前还没有创建过,onCreate() ...

  2. Android中服务的生命周期与两种方式的区别

    服务的生命周期跟Activity的生命周期类似.但是生命周期甚至比你关注服务如何创建和销毁更重要,因为服务能够在用户不知情的情况下在后台运行. 服务的生命周期---从创建到销毁---可以被分为以下两个 ...

  3. Android中服务的生命周期回调方法

  4. [android] 采用服务录制电话&服务的生命周期

    根据上一节代码里,加入一个录音功能,上传到服务器,就能实现一个录制器 当手机处于通话状态时,开启录音机 获取MediaRecorder对象,通过new出来 调用MediaRecorder对象的setA ...

  5. android: 服务的生命周期

    9.4   服务的生命周期 之前章节我们学习过了活动以及碎片的生命周期.类似地,服务也有自己的生命周期, 前面我们使用到的 onCreate().onStartCommand().onBind()和 ...

  6. WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[下篇]

    原文:WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[下篇] 在[第2篇]中,我们深入剖析了单调(PerCall)模式下WCF对服务实例生命周期的控制,现在我们来 ...

  7. [Android] Service服务详解以及如何使service服务不被杀死

    排版上的细节有些不好看,主要是我用的MarkDown编辑器预览和这里的不一样,在那个上面的样式很舒服.这里要改的地方太多就不想改了,将就看吧.下次写的时候注意.还有看到错误给我提啊. 本文链接:htt ...

  8. android Service服务(二)

    1.1 活动和服务进行通信 上一节中我们学习了启动和停止服务的方法.不知道你又没有发现,虽然服务是在活动里启动的,但在启动了服务之后,活动和服务基本上就没关系了,确实如此,我们在活动里调用了start ...

  9. Android Service 服务(三)—— bindService与remoteService

    (转自:http://blog.csdn.net/ithomer/article/details/7366396)   一.bindService简介 bindService是绑定Service服务, ...

随机推荐

  1. 重装系统之制作U盘启动盘

    准备: 1.需要一个大于4G的U盘. 2.一个原版系统. 3.制作U盘启动盘的工具—ultraliso. 一.一个大于4G的U盘 制作启动盘将会格式化U盘,记得做好备份. 二.一个原版系统 至于你要装 ...

  2. GBDT和随机森林的区别

    GBDT和随机森林的相同点: 1.都是由多棵树组成 2.最终的结果都是由多棵树一起决定 GBDT和随机森林的不同点: 1.组成随机森林的树可以是分类树,也可以是回归树:而GBDT只由回归树组成 2.组 ...

  3. R绘图 第十二篇:散点图(高级)

    散点图用于描述两个连续性变量间的关系,三个变量之间的关系可以通过3D图形或气泡来展示,多个变量之间的两两关系可以通过散点图矩阵来展示. 一,添加了最佳拟合曲线的散点图 使用基础函数plot(x,y)来 ...

  4. 【nodejs】让nodejs像后端mvc框架(asp.net mvc )一样处理请求--控制器的声明定义和发现篇(3/8)

    文章目录 前情概要 前面文章把路由已经介绍的差不多了,包括url映射,路由选择等.接下来讲一讲controller的一些基本规则 BaseController的所有代码都在这里拉.相当简单. 主要逻辑 ...

  5. Docker容器学习梳理 - 日常操作总结

    使用Docker已有一段时间了,今天正好有空梳理下自己平时操作Docker时的一些命令和注意细节: Docker 命令帮助 $ sudo docker Commands: attach Attach ...

  6. taro之React Native 端开发研究

    初步结论:如果想把 React Native 集成到现有的原生项目中,不能使用taro的React Native 端开发功能(目前来说不能实现,以后再观察).   RN开发有2种模式: 1.一是原生A ...

  7. 第七周 linux如何装载和启动一个可执行文件

    潘恒 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验内容 1.预处理. ...

  8. 《Linux课本》读书笔记 第十七章 模块

    设备与模块: 设备类型:块设备(blkdev).字符设备(cdev).网络设备: 模块: 分析hello,world模块代码.Hello_init是模块的入口点,通过module_init()注册到系 ...

  9. [what is machine learning?]

    1.2 [what is machine learning?] 1.人:observation -->  learing  -->  skill 机器:data --> ML --& ...

  10. mybatis中批量更新的问题

    问题:使用mybatis在执批量更新操作时,一直报错执行失败 解决方法: 首先打印了SQL语句,发现SQL语句拿出来执行没问题,也可以批量执行.SQL没问题,应该是配置的问题. 在网上查询和很多资料, ...