- 浏览: 1078195 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (202)
- Android (31)
- Eclipse 使用 (14)
- 笔记 (5)
- 杂七杂八 (3)
- Java (18)
- 数据库 (6)
- web (21)
- JavaScript (24)
- Http (1)
- 杂谈 (1)
- JSP & Servlet (5)
- log4j (1)
- Linux (13)
- MS Office (3)
- postgresql (7)
- Tomcat (5)
- windows (4)
- tmp (1)
- Perl (1)
- Struts2 (17)
- JQuery (5)
- HTML5 (3)
- JSLint (2)
- iphone (1)
- ant (2)
- IE (1)
- tcp (1)
- JBoss (4)
- 正则表达式 (2)
- jmeter (1)
- CI (1)
- sonarqube (1)
- junit (1)
- chrome (1)
- mybatis (2)
- mysql (3)
- spring (2)
- maven (1)
最新评论
-
天使建站:
看这里:jquery里和操作数组的相关的:$.merg ...
JQuery 数组 -
lgywindows:
我照你的方法实现了在java中取国际化。谢谢提供!
spring mvc中,如何在 Java 代码里,获取 国际化 内容 -
ylhkaixin:
请教下大神,我转换报告的时候报错:report: [x ...
通过ant来批量执行jmeter脚本,并生成报告(附: 生成报告时报“Content is not allowed in prolog”这个错误的解决方案) -
lemon_yt:
正在找
spring mvc中,如何在 Java 代码里,获取 国际化 内容 -
Rainbow702:
alike222 写道Rainbow702 写道MyDream ...
通过ant来批量执行jmeter脚本,并生成报告(附: 生成报告时报“Content is not allowed in prolog”这个错误的解决方案)
我们有两种方式(start与bind)启动一个Service,每一种方式启动的Service生命周期是不一样的,这篇贴子主要写的是 start service。
它的生命周期中只有三个阶段:onCreate, onStartCommand(取代原来的onStart方法), onDestroy。如下图:
需要注意的有:
① 如果是 调用者 直接退出而没有调用 stopService 的话,那么被启动的 Service 会一直在后台运行,直至其stopService 方法被调用,或者它自己调用stopSelf 方法。
② 在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStartCommand()方法。如果调用startService()方法前服务已经被创建,那么会直接调用onStartCommand()方法。也就是说,多次调用startService()方法并不会导致多次创建服务。另外,不管被 start 多少次,只需一次 stop 便可将相应的service关闭。
③ 具体的操作应该放在 onStartCommand() 里面
以下通过截图来看:
上图的中的四个按钮均是针对于同一个Service进行的操作,此时去 application ,可以查看到 "Running Service" 的列表如下:
这个,我们去点击上面的按钮(分别点击startservice 1 和 2 各两次),结果如下:
从图中,我们可以看出, onCreate() 方法只在第一次创建服务的时候被调用了。
现在,通过“返回键”来退回至主界面,然后再去 application 的 running service中去查看,可得下面的截图:
从此图中,我们可以看出,虽然Activity被finish掉了,但是由它启动的service仍然在后台运行着。
此时,重新打开该应用,然后直接点击 stop service 1 和 2 按钮各两次(不需再新点击 start service按钮),可以如下截图:
从此图中我们可以看出,只有第一次停止服务的时候,才会调用 onDestroy() 方法。
此时,再去 application 的 running service中去查看,可得下面的截图,发现服务确实已经被停止了:
下面附上部分源码(具体地请参见附件):
// 四个按钮的响应事件 private OnClickListener btnListener = new OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) { case R.id.startSer1: updateLog("Start Service 1 pressed"); // 启动服务(如果想传递数据,也可以将其封装进该intent) startService(intent); break; case R.id.startSer2: updateLog("Start Service 2 pressed"); startService(intent); break; case R.id.stopSer1: updateLog("Stop Service 1 pressed"); // 停止服务 stopService(intent); break; case R.id.stopSer2: updateLog("Stop Service 2 pressed"); stopService(intent); break; default: break; } } };
// service 的实现 public class MyService extends Service { private static final String TAG = "MyService"; @Override public void onCreate() { super.onCreate(); MyServiceActivity.updateLog(TAG + " ----> onCreate()"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { MyServiceActivity.updateLog(TAG + " ----> onStartCommand()"); return START_STICKY; } @Override public IBinder onBind(Intent intent) { MyServiceActivity.updateLog(TAG + " ----> onBind()"); return null; } @Override public void onDestroy() { super.onDestroy(); MyServiceActivity.updateLog(TAG + " ----> onDestroy()"); } }
- ServiceDemo.zip (49.7 KB)
- 下载次数: 259
发表评论
-
动态更新APK
2011-09-08 12:29 4357开发了一个APK后,往往后续需要进行更新升级。那么,当用户选择 ... -
Android数据保存之PreferenceActivity
2011-09-07 15:49 5748看到很多书中都没有对PreferenceActivit ... -
AsyncTask 的使用
2011-08-22 13:39 6030在开发Android应用时必须遵守单线程模型的原则: ... -
Android Service 之三(Bind Service,使用 AIDL)
2011-08-15 17:57 12138前面写了 Bind Service 的两种实现方式,接下来转一 ... -
Android Service 之三(Bind Service,使用 Messenger)
2011-08-15 17:26 10029上次讲了第一种 Bind Service 的实现方式,今天讲 ... -
Android NOtification 使用
2011-08-12 17:12 5004一、 Notification 简介 在 andro ... -
如何快速启动 Android 模拟器
2011-08-12 11:04 2496一直不知道在创建 AVD 时,那个 "enable ... -
Android 模拟器启动失败(SDL_app:emulator.exe )解决方法
2011-08-12 10:45 3534今天新建了一个AVD,给它划分了512MB的空间,然后启动之, ... -
Android Service 之三(Bind Service, 继承自 Binder 类)
2011-08-10 13:08 29968之前提及过,启动Service有两种方式:startServ ... -
android service 之二(IntentService)
2011-08-09 11:13 31684不管是何种Service,它默认都是在应用程序的主线程(亦即U ... -
写Service Demo的时候遇到的一个问题小结一下
2011-08-08 14:29 8520我写了一个 Service 的Demo,但是将启动Servi ... -
百度Android工程师面试题
2011-07-28 09:49 2225百度Android工程师面试题 -
Android中UI主线程与子线程
2011-07-26 14:10 2100在一个Android 程序开始运行的时候,会单独启动一个Pro ... -
Android线程模型(Painless Threading)
2011-07-26 14:07 1561当第一次启动一个Android ... -
Android 之 传感器 应用
2011-07-26 10:42 5271传感器的使用 1.传感器类型: 方向、加速度(重力)、 ... -
Logcat出错:Could not create the view: For input string:
2011-07-22 13:39 2535使用eclipse开发android应用已经一年多了,但今 ... -
Goolge Map API 源码
2011-07-14 14:16 3859由于做GOOGLE MAP 的项目,所以就上网想找它的源码。结 ... -
如何用metersToEquatorPixels实现任意纬度的米到像素的转换
2011-07-14 13:40 4737今天又是神奇的发现:我希望在MapView的Overlay子类 ... -
申请 android google map API key(转)
2011-07-10 14:07 18441.首先要得到你的debug keystore位置: ... -
windows下如何批量下载android源码
2011-05-18 22:56 2599为了在windows下批量下载Android的源码,上网查 ...
相关推荐
总结来说,`startService()`是Android中启动服务的一种方式,适用于执行非交互的后台任务。在使用时,需要正确处理Service的生命周期方法,确保服务在必要时启动和停止,并遵循Android的后台服务最佳实践,以提供...
本示例将探讨“startService”方式启动Android服务的基本概念、工作原理以及如何实现一个简单的服务示例。 首先,我们需要理解`startService()`这个方法。当你调用`startService()`时,Android系统会启动指定的服务...
在Android应用开发中,Service是四大组件之一,用于在后台长时间运行操作,比如播放音乐、网络通信等。然而,如果不加以控制,用户或者系统可能会多次启动同一个Service,导致不必要的资源消耗和服务的异常行为。本...
在Android开发中,Service是四大组件之一,它在后台运行,不与用户界面直接交互,常用于执行长时间的任务,如播放音乐、网络通信等。本篇文章将深入解析"android service 简单实例源代码",帮助你理解如何在Android...
在 Android 系统中,startService 函数是一个非常重要的函数,它允许开发者在新进程中启动自定义服务。这项技术可以将一些计算型逻辑从主进程中分离出来,从而提高用户体验。在本文中,我们将详细分析主进程是如何...
`Service` 是Android四大组件之一,用于执行长时间运行的操作,如播放音乐、连接到网络服务或处理后台任务。Service 不具有用户界面,但可以与Activity交互,提供消息传递机制。 ### 二、startService()方法 `start...
`startService` 是 Android 中启动 `Service` 的常见方式之一。当你调用 `startService()` 方法时,系统会创建一个 `Service` 实例,并执行 `onStartCommand()` 方法。这个方法是 `Service` 开始执行任务的地方。`...
本篇文章将深入探讨`startService`类型的Android Service,通过一个简单的实例来展示其工作原理和使用方法。 `Service`分为两种主要类型:`Start Service`和`Bound Service`。`Start Service`主要用于执行非交互式...
`startService()`主要用于启动一个无需与调用者直接交互的服务,服务一旦启动就会在后台持续运行,直到服务自行停止或系统因资源限制而杀死服务。`com.njupt.zhb.MusicPlay`这个文件名可能表示这是一个播放音乐的...
在Android应用开发中,Service是四大组件之一,用于在后台执行长时间运行的操作,不与用户界面直接交互。本文将深入探讨“Android Service之bound实现”,理解如何通过绑定服务(Bound Service)来创建一个与应用...
在Android开发中,Service是应用组件之一,它可以在后台长时间运行,即使用户界面不在活动状态。Service主要用于执行长时间运行的任务,如音乐播放、网络通信等。而`Toast`则是一种轻量级的通知方式,用于显示短暂的...
在Android系统中,`startService`是一个至关重要的方法,它用于启动一个后台服务(Service)。服务是Android四大组件之一,允许应用程序在没有用户界面的情况下执行长时间运行的操作。本篇文章将深入探讨`start...
在Android应用开发中,Service是四大组件之一,它在后台长时间运行,不依赖于任何用户界面,用于执行长时间运行的任务,如播放音乐、网络通信等。这篇博客"Android Service深入解析Demo"通过实例深入讲解了Service的...
在`Activity`中启动`Service`,通常使用`startService()`方法,需要传入一个`Intent`对象,`Intent`中可以携带数据。例如: ```java Intent intent = new Intent(this, MyService.class); // 如果需要传递数据,...
在Android开发中,Service是应用程序组件之一,用于在后台执行长时间运行的操作,即使用户与应用程序交互的界面已关闭。本篇文章将深入探讨Android中的Service,分析不同类型的Service及其特性,并对比它们之间的...
startService()用于一次性任务,而bindService()则用于需要与Service保持连接的情况。 当涉及到多个Activity与同一个Service通信时,我们可以采用以下几种策略: 1. **BroadcastReceiver**: 创建一个...
在Android应用开发中,Service是四大组件之一,它在后台执行长时间运行的操作,不与用户界面直接交互。本讲解文档将深入探讨Local Service和Remote Service的实现与使用,以及广播接收器的重要作用。 首先,我们来...
在Android应用开发中,Service是四大组件之一,用于在后台执行长时间运行的操作,即使用户界面不在活动状态。本文将通过四个小实例详细介绍Android Service的四种启动方式:启动方式、绑定方式、线程方式以及AIDL...
在Android应用开发中,Service是四大组件之一,它在后台长时间运行,即使用户与应用程序的交互界面(Activity)已经关闭。Service主要用于执行长时间运行的操作,如播放音乐、处理网络交易或者与内容提供者进行交互...