- 浏览: 141063 次
- 性别:
- 来自: 枣阳
文章分类
- 全部博客 (61)
- dwr (1)
- Flex (8)
- android (15)
- html转换成pdf (1)
- 八款开源 Android 游戏引擎 (巨好的资源) (1)
- url (0)
- Junit测试中找不到junit.framework.testcase (0)
- Junit (1)
- Java (4)
- spring (2)
- itext (1)
- JDBC (2)
- 正则表达式 (1)
- package (1)
- SVN (1)
- json (2)
- 常见问题 (1)
- SQL (1)
- Html5 (3)
- 看看 (1)
- 理论知识 (0)
- JavaScript (0)
- Jquery (0)
- MySQL MyISAM InnoDB 区别 (0)
- MySQL (0)
- struts2 标签 获取s:param的值 子页面获取 s:include s:param的值 (0)
- Oracle (1)
- Web (1)
- 性能 (0)
- Tomcat (0)
- Struts2 (5)
- tools (0)
- Exception (0)
- web开发问题 (0)
- log (0)
- Struts 2验证框架出错:403 for URL:http:////www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd (1)
- IOS (0)
- eclipse (0)
- webservice (0)
- AOP (0)
- View (0)
- 视图 (0)
- hsqldb (0)
- jar包 (0)
- Annotation (0)
- error at ::0 can't find referenced pointcut和error at ::0 formal unbound in point (0)
- Demo (0)
- 精彩文章 (0)
- rest (0)
- Test (0)
- 工具 (0)
- linux (0)
- 常用知识 (0)
- JavaScript 遍历JSON (0)
- 继承了之后还要不要注入的问题 (0)
- liunx (0)
- jQuery Mobile (1)
- ext (0)
- 二维码微信扫描 (0)
- 分享 (0)
- iOS7 (1)
- http (0)
- object-c (0)
- nginx (0)
- myEclipse10 (1)
- VM (0)
- window (0)
- server (0)
- lvs (0)
- 在线支付 (0)
- 安全技术 (0)
- 知识 (0)
- servlet (0)
- 支付 (0)
- mybatis (0)
- 服务器 (2)
- 使用SeaJS,require加载Jquery的时候总是为null (0)
- seaJs (0)
- 微信 (1)
最新评论
-
medlying:
html中的js能够被解析执行吗
Itext 实现 html转换成pdf -
794581572:
还是出现了乱码.. 编码用utf-8还是出了乱码
Itext 实现 html转换成pdf -
mbq820:
楼主为什么我的 提示不支持该字体:Unsupported fo ...
Itext 实现 html转换成pdf -
SwordShadow:
博主写的太好了,可以转载吗?
Itext 实现 html转换成pdf -
sinotao1:
写得非常好。
Struts2 中的数据传输
启动Service有两种方式:startService 与 bindService。
① Bind Service就像是C/S架构中的服务端,其他组件(比如 Activity)绑定到它(通过 bindService()),可以向它发送请求,可以接受从它返回的响应,它甚至还提供了进程间通信(IPC)功能。
② 一个service要想能够被其他组件绑定,那么它的 onBind() 方法必须被实现,且必须返回一个 IBinder 对象,然后其他组件可以通过这个 IBinder 对象与该 service 进行通讯。
③ 多个client可以绑定至同一个service,但该 service 的onBind() 方法只会在第一个 client 绑定至其的时候被调用,当其他 client 再次绑定到它的时候,并不会调用 onBind() 方法,而是直接返回第一次被调用时产生的那个 IBinder 对象。也就是说,在其生命周期内,onBind() 只会被调用一次。
④ Bind Service 的生命周期如下图所示:
⑤ Bind Service 不会在后台无限期的一直运行,而是当所有绑定至其的组件都调用了 unbindService() 进行解绑之后,系统就会将其停掉以回收资源。
⑥ 当我们要实现一个 Bind Service 的时候,最重要的就是实现它的 onBind() 方法以返回一个 IBinder 对象
要生成一个 Bound Service ,共有三种方式:继承自 Binder 类,使用 Messenger ,使用 AIDL。下面且听小生一一道来。
第一种:继承自 Binder 类
需要注意的是,这种方式仅仅适用于这种场合:service 与 application 在同一个进程中。这种场合也是最最常见的。
它分以下几个步骤:
a. 在你的 service 类中声明一个内部类来继承 Binder 类。在该内部类中,最好提供一个公共方法来返回你的 service 实例。
b. 在你的 service 类中需要声明一个这个内部类的实例,以供在 onBind() 方法中返回
c. 在 client 端,在 onServiceConnected() 方法中得到从 onBind() 方法中返回的 IBinder 对象,然后可以通过该 对象中的公共方法得到相应的 service 实例,正如 第一个步骤 所说的那样。
d. 在 service 中提供公共方法, 这样就可以在组件(如 Activity 中调用这些公共方法了)
下面给出一例:
service 代码
public class BindServiceWithIBinder extends Service {
private static final String TAG = "BindServiceWithIBinder";
private final MyIBinder myIBinder = new MyIBinder();
/**
* bindService() 时,调用的是这个方法,而非 onStartCommnad() 方法
*/
@Override
public IBinder onBind(Intent intent) {
// 在主 Activity 上的 TextView 中打印出一行LOG
MyServiceActivity.vh.sendMessage(MyServiceActivity.createMessage(
MyServiceActivity.UPDATE_VIEW, TAG + " ----> onBind"));
return myIBinder;
}
@Override
public void onCreate() {
MyServiceActivity.vh.sendMessage(MyServiceActivity.createMessage(
MyServiceActivity.UPDATE_VIEW, TAG + " ----> onCreate"));
}
@Override
public void onDestroy() {
MyServiceActivity.vh.sendMessage(MyServiceActivity.createMessage(
MyServiceActivity.UPDATE_VIEW, TAG + " ----> onDestroy"));
}
@Override
public void onRebind(Intent intent) {
MyServiceActivity.vh.sendMessage(MyServiceActivity.createMessage(
MyServiceActivity.UPDATE_VIEW, TAG + " ----> onRebind"));
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
MyServiceActivity.vh.sendMessage(MyServiceActivity.createMessage(
MyServiceActivity.UPDATE_VIEW, TAG + " ----> onStartCommand"));
return START_STICKY;
}
@Override
public boolean onUnbind(Intent intent) {
MyServiceActivity.vh.sendMessage(MyServiceActivity.createMessage(
MyServiceActivity.UPDATE_VIEW, TAG + " ----> onUnbind"));
return super.onUnbind(intent);
}
/**
* 声明一个 Binder 类的实现类,供在 onBind() 方法中返回该类的一个实例
* @author 001718
*
*/
public class MyIBinder extends Binder {
public Service getService() {
MyServiceActivity.vh.sendMessage(MyServiceActivity.createMessage(
MyServiceActivity.UPDATE_VIEW,
"BindServiceWithIBinder.MyIBinder.getService()"));
return BindServiceWithIBinder.this;
}
}
/**
* service 提供的公共方法,在activity中可以调用
*/
public void download() {
try {
MyServiceActivity.vh.sendMessage(MyServiceActivity.createMessage(
MyServiceActivity.UPDATE_VIEW, TAG
+ " ----> download(): 文件下载中..."));
Thread.sleep(3000);
MyServiceActivity.vh.sendMessage(MyServiceActivity.createMessage(
MyServiceActivity.UPDATE_VIEW, TAG
+ " ----> download(): 文件下载完成..."));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
主 Activity 中的相应关键代码为 :
private void doUnbindService() {
if (isBound) {
unbindService(myLocalServiceConnection);
isBound = false;
}
}
private void doBindService() {
Log.i("bind", "begin to bind");
bindService(intent, myLocalServiceConnection, Context.BIND_AUTO_CREATE);
}
private ServiceConnection myLocalServiceConnection = new ServiceConnection() {
public void onServiceConnected(android.content.ComponentName name,
android.os.IBinder service) {
MyServiceActivity.vh.sendMessage(MyServiceActivity.createMessage(
MyServiceActivity.UPDATE_VIEW,
"myServiceConnection.onServiceConnected"));
// 因为 客户端 与 服务 在同一个进程内,这样一来,就可以知道参数 "service"的类型了,也就可以进行显示的
强制类型转换了。
// 而如果 客户端与服务不在同一个进程中的话,那么此处是不可以进行显示强制类型转换的,
// 因为,通过Debug,可以发现此时传进来的 Service 的类型是 BinderProxy
MyIBinder myIBinder = (MyIBinder) service;
bsi = (BindServiceWithIBinder) myIBinder.getService();
isBound = true;
bsi.download();
};
public void onServiceDisconnected(android.content.ComponentName name) {
MyServiceActivity.vh.sendMessage(MyServiceActivity.createMessage(
MyServiceActivity.UPDATE_VIEW,
"myServiceConnection.onServiceDisconnected"));
isBound = false;
};
};
下面来看运行效果:
连续点击两次 Bind Service
从此图中可以看出,bind service 的响应过程。也可以看到,第二次点击时,service 没作任何反应,因为当前 Activity 在第一次点击后就已经跟此service绑定了。
点击 Unbind Service
至此,该 service 的生命周期结束,它也会被系统给停掉以回收资源。
来自:http://rainbow702.iteye.com/blog/1144521
发表评论
-
Android View三种属性——VISIBLE,INVISIBLE,GONE
2014-08-12 15:12 0INVISIBLE:仍旧会占用空间,只是内容不显示。 GO ... -
android Gson的使用
2014-07-29 15:47 0相对于较为传统的Json解析来说,google共享的开源Gs ... -
利用HTML5开发Android笔记
2014-01-08 19:32 0http://johncookie.iteye.com/bl ... -
android 中 webview 怎么用 localStorage?
2014-01-08 19:30 0我在 android里面 使用html5的 localSto ... -
Android 处理流程
2013-11-20 00:50 0今天看了一下别人写的android代码。 大致了解了and ... -
Android开发规范
2013-08-17 08:50 0[size=large]一、Android编码 ... -
android关于AndroidManifest.xml详细分析
2013-07-29 23:57 0http://my.eoe.cn/1087692/arch ... -
Android 精华文章
2013-07-29 23:33 0AndroidManifest.xml http:/ ... -
记事本
2013-04-15 16:28 0对于WebChromeClient,WebViewClien ... -
关于android WebViewClient的方法解释
2013-04-15 14:49 32231、public boolean shouldOverri ... -
PhoneGap 在Android 手机上的全屏(FullScreen)问题
2013-04-15 11:13 1723(注:本方法只适用于PhoneGap 0.93或更高版本) ... -
android 界面布局
2012-06-12 23:26 1521布局: 在 android 中我们常用的布局方式有这 ... -
Activity利用Handler与Thread进行通讯,写了一个简单Demo
2012-06-11 23:32 5878最近写了一个列子,想跟大家一起分享. 用android.os. ... -
Android 文件的保存和读取
2012-05-30 09:55 1351Android 给我们提供了两个方法返回输入、输出流,分别为: ... -
Android中strings.xml文件
2012-05-29 18:13 1520如果动态的修改Android中strings.xml文件中的值 ... -
Android 中LayoutInflater的使用
2012-05-28 17:54 1471在实际开发种LayoutInflater这个类还是非常有用的, ... -
Android 应用程序之间数据共享—ContentProvider
2012-05-25 11:56 1318在Android 应用程序之间数据共享—-ContentRes ... -
Android BroadcastReceiver 学习
2012-05-23 14:12 1383BroadcastReceiver 用于异步 ... -
Android DDMS
2012-05-22 10:20 1163DDMS 的全称是Dalvik Debug Monitor S ... -
Android API 解析开发包
2012-05-22 09:08 12691、Android API核心开发包介绍 SDK ...
相关推荐
"bind Service"是Android中一种特殊的启动服务的方式,它主要用于客户端和服务端之间的交互,而不是像startService那样只启动服务并执行一次性任务。在本项目中,开发者展示了通过三种方法绑定服务,并利用Messenger...
在Android应用开发中,`Service`和`Activity`是两个重要的组件。`Service`用于在后台执行长时间运行的任务,而`Activity`则负责用户界面交互。在某些场景下,我们可能需要在`Service`和`Activity`之间传递数据,比如...
在Android开发中,Service是四大组件之一,它在后台运行,不与用户界面直接交互,常用于执行长时间的任务,如播放音乐、网络通信等。本篇文章将深入解析"android service 简单实例源代码",帮助你理解如何在Android...
在Android开发中,Service是应用程序组件之一,用于在后台执行长时间运行的操作,即使用户与应用程序交互的界面已关闭。本篇文章将深入探讨Android中的Service,分析不同类型的Service及其特性,并对比它们之间的...
创建自定义Service时,需要继承自Android的Service类,并重写onStartCommand()或onBind()方法。onStartCommand()用于处理通过startService()启动的服务,而onBind()则为绑定服务提供接口。 在AndroidManifest.xml中...
在Android开发中,服务(Service)是一个至关重要的组件,它允许应用程序在后台执行长时间运行的操作,即使用户没有与应用交互。本示例“Android local service demo”聚焦于本地服务(Local Service),它是Android...
在Android开发中,Service主要分为两种类型:Start Service和Bind Service。Start Service主要用于执行一个不需要与调用者交互的长期任务,例如后台音乐播放或数据同步。而Bind Service则强调了与调用者之间的绑定...
在Android应用开发中,Service是四大组件之一,用于在后台执行长时间运行的操作,即使用户离开了应用程序界面,Service依然可以运行。本教程将深入探讨如何正确地停止一个Android Service,同时结合源码分析其内部...
在Android应用开发中,Service是四大组件之一,它在后台执行长时间运行的操作,不与用户交互。本资源提供了关于Android中Service的源码,重点展示了Service的生命周期以及如何在Service中播放音乐。通过分析和学习这...
绑定Service时,开发者需要重写Service中的onBind()方法,并返回一个实现了IBinder接口的实例,Activity使用这个实例与Service通信。 通过在BroadcastReceiver中启动Service,可以实现在特定事件发生时(如网络连接...
在Android应用开发中,`Service` 是一个非常重要的组件,它允许应用程序在后台长时间运行,即使用户与应用程序的交互界面已经关闭。这篇博客"Android_Service1"深入探讨了`Service`的相关知识,以下是对这些知识点的...
在Android应用开发中,Service是一种用于在后台长时间运行的任务组件,它不提供用户界面,但可以与其他组件(如Activity)交互。"Android绑定serviceDemo"是专门为演示如何使用bindService方法来启动并交互Service的...
在Android应用开发中,Remote Service是一种允许不同应用进程间通信并执行操作的服务。Remote Service能够使得应用程序组件(如Activity)可以跨进程调用服务中的方法,实现数据共享或执行耗时任务,而不阻塞用户...
在Android开发中,Service是四大组件之一,它用于在后台执行长时间运行的操作,即使用户离开了应用程序界面,Service依然可以运行。本篇文章将深入探讨Service的两种主要应用:`startService`和`bindService`,并...
在Android应用开发中,Service组件是四大组件之一,它用于在后台执行长时间运行的操作,而无需与用户交互。Service可以在用户界面关闭或者应用被切换到后台时仍然保持运行状态,这使得Service成为处理音乐播放、后台...
在Android开发中,服务(Service)是用于在后台执行长时间运行操作的重要组件,不与用户界面直接交互。当服务需要跨进程通信时,我们就需要用到远程Service。本实例将详细介绍如何在Android中实现远程Service调用,...
在Android应用开发中,Service是用于执行长时间运行操作的一个组件,比如后台下载任务。本教程将详细介绍如何使用Android Service来实现文件下载,并在前台显示进度,同时通过通知栏同步更新下载进度。 首先,我们...
在Android开发中,远程服务(Remote Service)是一种可以让应用程序组件在其他进程中运行的服务,通常用于实现跨进程通信(IPC,Inter-Process Communication)。这个概念是Android系统为了支持不同应用之间的数据...
在Android应用开发中,Service是不可或缺的一个核心组件,主要用于实现应用程序在后台长时间运行的任务,即使用户界面不再活跃或应用程序被关闭。Service不同于Activity,它不包含用户界面,但可以与其他组件(如...
在Android应用开发中,Service是四大组件之一,用于在后台执行长时间运行的操作,即使用户界面关闭也能继续工作。本篇文章将深入探讨`startService`类型的Android Service,通过一个简单的实例来展示其工作原理和...