- 浏览: 1591191 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (289)
- java 语法基础 (51)
- spring (8)
- mvc struct /Ant --build.xml (8)
- SOA (0)
- oracle 9i/10g (23)
- sql server 2000-2005 (3)
- 数据库基础知识 (6)
- 设计模式与软件架构 (10)
- Hibernate 持久化 (9)
- J2SE/J2EE/J2ME/AJAX 技术 (8)
- JSF 技术 (3)
- JAVA 图形化 (0)
- JMS (40)
- Eclipse 3.2 IDE 开发技巧 (13)
- 项目处理方法集合 (2)
- html/jsp/javascript (2)
- Unix/Linux (9)
- j2me/ARM/windriver/嵌入式 (4)
- 电信科学 (8)
- jsp (1)
- c/c++ (1)
- LZW压缩算法(java) (2)
- Android (77)
- 版本管理git/svn (2)
最新评论
-
huihai:
有demo吗?
NamingStrategy实现动态表名映射 -
cangbaotu:
推荐给大家一些有用的爬虫源码:https://github.c ...
网络爬虫(源代码参考) -
tuspark:
除了.classpath文件以外,.project文件也应该了 ...
Eclipse .classpath文件浅谈 -
tuspark:
造成eclipse自动关闭的原因有很多,这里有很多介绍:ecl ...
eclipse 自动关闭 解决方案 -
DEMONU:
网上都是这些,这种文章。。。
ActiveMQ中的消息持久性
两个进程间的Service需要进行通信,则需要把对象序列化后进行互相发送。
Android提供了一个 AIDL (Android接口定义语言)工具来处理序列化和通信。这种情况下Service需要以aidl文件的方式提供服务接口,AIDL工具将生成一个相应的java接口,并且在生成的服务接口中包含一个功能调用的stub服务桩类。Service的实现类需要去继承这个 stub服务桩类。Service的onBind方法会返回实现类的对象,之后你就可以使用它了.现在来实现一个HelloWorld级的服务以及在Activity中使用这个服务。步骤如下:
1.编写aidl文件,在这个文件中提供了服务所提供的方法的接口,文件的扩展名为aidl,在我们的示例中命名为IDataTimeService.aidl文件的内容为如下所示:
- package com.services.demo2;
- // Declare the interface.
- interface IDataTimeService {
- String getCurrentDataTime();
- }
package com.services.demo2; // Declare the interface. interface IDataTimeService { String getCurrentDataTime(); }
2.编写服务的实现类,在这个示例中为DataTimeService.java,内容如下:
- public class DataTimeService extends Service{
- public static final String BROADCAST_ACTION = "com.services.demo2.DataTimeServiceEvent";
- /**
- 使用上面定义的字符串常量创建一个Intent的实例,如果服务在运行的过程中发生的事件都可以通过Service的
- sendBroadcast(broadcast)方法来发送一个广播消息通知Activity,然后有Activity注册的接收者进行处理;
- */
- private Intent broadcast = new Intent(BROADCAST_ACTION);
- sendBroadcast(broadcast);
- private final IDataTimeService.Stub binder = new IDataTimeService.Stub() {
- public String getCurrentDataTime() {
- return (getCurrentDataTimeImpl());
- }
- };
- synchronized private String getCurrentDataTimeImpl() {
- Date date=new Date();
- return (date.toLocaleString());
- }
- @Override
- public IBinder onBind(Intent intent) {
- return (binder);
- }
- }
public class DataTimeService extends Service{ public static final String BROADCAST_ACTION = "com.services.demo2.DataTimeServiceEvent"; /** 使用上面定义的字符串常量创建一个Intent的实例,如果服务在运行的过程中发生的事件都可以通过Service的 sendBroadcast(broadcast)方法来发送一个广播消息通知Activity,然后有Activity注册的接收者进行处理; */ private Intent broadcast = new Intent(BROADCAST_ACTION); sendBroadcast(broadcast); private final IDataTimeService.Stub binder = new IDataTimeService.Stub() { public String getCurrentDataTime() { return (getCurrentDataTimeImpl()); } }; synchronized private String getCurrentDataTimeImpl() { Date date=new Date(); return (date.toLocaleString()); } @Override public IBinder onBind(Intent intent) { return (binder); } }
3.现在编写一个Activity,来消费这个服务:
- public class ServicesDemo2 extends Activity {
- private IDataTimeService service = null;
- private Intent serviceIntent = null;
- private WebView browser;
- private ServiceConnection svcConn = new ServiceConnection() {
- public void onServiceConnected(ComponentName className, IBinder binder) {
- service = IDataTimeService.Stub.asInterface(binder);
- browser.postDelayed(new Runnable() {
- public void run() {
- updateForecast();
- }
- }, 1000);
- }
- public void onServiceDisconnected(ComponentName className) {
- service = null;
- }
- };
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- browser = (WebView) findViewById(R.id.webkit);
- serviceIntent = new Intent(this, DataTimeServiceImpl.class);
- //绑定一个服务
- bindService(serviceIntent, svcConn, BIND_AUTO_CREATE);
- }
- @Override
- public void onResume() {
- super.onResume();
- /**
- 注册广播消息的接收者,在android中服务与Activity的通信依靠广播发送消息,然后由Activity注册的接收者
- 接收到消息,进行相应的处理这里使用DataTimeServiceImpl.BROADCAST_ACTION来过滤,表明它只接收
- DataTimeService中的调用sendBroadcast(broadcast)发送的广播消息;
- */
- registerReceiver(receiver, new IntentFilter(
- DataTimeServiceImpl.BROADCAST_ACTION));
- }
- @Override
- public void onPause() {
- super.onPause();
- unregisterReceiver(receiver);
- }
- @Override
- public void onDestroy() {
- super.onDestroy();
- unbindService(svcConn);
- }
- private void updateForecast() {
- try {
- String page = service.getForecastPage();
- if (page != null) {
- browser.loadDataWithBaseURL(null, page, "text/html", "UTF-8",
- null);
- browser.postDelayed(new Runnable() {
- public void run() {
- updateForecast();
- }
- }, 1000);
- }
- } catch (final Throwable t) {
- svcConn.onServiceDisconnected(null);
- }
- }
- //接收者实例
- private BroadcastReceiver receiver = new BroadcastReceiver() {
- public void onReceive(Context context, Intent intent) {
- runOnUiThread(new Runnable() {
- public void run() {
- updateForecast();
- }
- });
- }
- };
- }
发表评论
-
APN(default、mms、supl、dun、hipri接入点类型的区别)
2013-10-10 19:31 45867设置APN上网时,大家可能经常遇到这个问题:为什么有时要填写 ... -
AMR音频编码器概述及文件格式分析
2013-10-10 19:29 3958全称Adaptive Multi-Rate,自适应多速率编码 ... -
pad 强制加载 Hdpi资源 (2.3 dpi < 240)
2012-07-16 16:47 0pad 强制加载 Hdpi资源 (2.3 dpi < ... -
android 设计模式-享元模式
2011-12-16 23:01 2193享元(FlyWeight)模式,原意是“轻量级”模式,它用来解 ... -
statusbar 2.3
2011-11-08 16:04 1284以前我的文章分析过Stat ... -
android 输入法默认设置
2011-07-07 14:00 7197设置默认输入法 在 frameworks\base\co ... -
Android Media Scanner Process
2011-06-06 22:58 3409下面是系统图 Medi ... -
handler与多线程消息处理
2011-06-04 13:42 8282在Android下面也有多线程的概念,在C/C++中,子线程可 ... -
android light
2011-03-24 16:15 3414背光设置是在:设置->声音和显示->亮度,通过进度 ... -
PowerManagerService sensor
2011-03-22 20:06 2673默认分类 2010-12-24 14:34:55 阅读144 ... -
android 单例
2011-02-15 09:26 42291. Framework层的代码: A ... -
Android 开发之 Services 服务
2010-11-02 18:21 4244Service Service ... -
深入学习android之AlarmManager
2010-11-01 16:50 34768对应AlarmManage有一个Alarm ... -
eclipse+android+ddms+adt
2010-09-14 10:30 8460用eclipse + ADT作为android ... -
Menus
2010-09-05 19:01 1791Android Menus 文章分类:移动开发 1.O ... -
Android开机自启动应用开发
2010-08-28 10:07 4594目前需要开发一个开机自启动的GTD应用程序来提醒用户的 ... -
Android2.1_Launcher学习笔记
2010-08-11 13:40 3878文章分类:移动开发 好么,2.0的源码没看几天,2.1的 ... -
Browsing Android Source in Eclipse
2010-08-09 16:00 3437Google’s Android SDK includes ... -
android 编译
2010-08-07 16:31 25321 我的系统是Ubuntu 8.04 * 2 系统上 ... -
Ubuntu linux 右键添加"以管理员身份打开","在终端中打开"
2010-08-02 15:04 4662Ubuntu linux 右键添加"以管理员身份打开 ...
相关推荐
在Android系统中,进程间通信(Inter-Process Communication, 简称IPC)是一种关键机制,它允许不同应用或同一应用的不同进程之间交换数据。在Android的IPC方式中,AIDL(Android Interface Definition Language)是...
在Android系统中,进程间通信(Inter-Process Communication, 简称IPC)是一种关键机制,使得不同应用程序或同一程序的不同进程之间能够共享数据、调用服务等。本示例"android 进程间通信demo"专注于讲解如何利用...
在Android开发中,进程间的通信是一项非常重要的技术。特别是当需要与不同应用程序中的Activity进行交互时,掌握正确的通信方式至关重要。本文将深入探讨如何在Android应用之间进行跨进程访问Activity,并通过具体的...
在本"Android进程间通信Demo"中,我们将重点探讨两种主要的IPC方式:普通的进程间通信和通过AIDL(Android Interface Definition Language)实现的进程间对象传递。 首先,让我们来看看“16”部分,即Android进程间...
在这个"Android进程间通信源码"项目中,我们有两个主要的组件:PlayerClient(客户端)和PlayerServer(服务器端)。下面将详细介绍这两个组件以及Android IPC的基础知识。 首先,我们来看`PlayerClient`。这个...
在Android系统中,进程间通信(IPC,Inter-Process Communication)是实现不同应用程序之间数据交换的关键技术。AIDL(Android Interface Definition Language)是Android提供的一种强大的工具,它使得跨进程调用...
本教程将深入讲解AIDL的使用和其在Android进程间通信中的应用。 首先,我们要理解什么是AIDL。AIDL实际上是一种接口定义语言,类似于Java中的接口,但它的目的是让不同的Android进程之间能够调用彼此的方法。当一个...
Android进程间通信(IPC)机制Binder简要介绍和学习计划
### Android进程间通信机制(Binder)介绍 #### 1. 概述 Android系统中,Binder机制是实现进程间通信(IPC, Inter-Process Communication)的核心技术之一。它不仅为不同进程之间的对象提供了数据交换的功能,而且还...
android 进程间通信分析 android 进程间通信分析
虽然AIDL的学习曲线相对较陡峭,但它是Android中实现复杂进程间通信的关键技术,尤其对于跨进程服务调用和组件通信至关重要。理解并熟练掌握AIDL,能帮助开发者设计出更加高效、健壮的Android应用程序。
但有时我们需要让一个应用调用另一个应用的服务或共享数据,这就需要进程间通信。Aidl便是Android为解决这一问题而提供的工具之一。 **2. Aidl简介** Aidl是一种接口定义语言,用于描述服务端公开的接口和方法。...
Android 使用Socket完成进程间通信,服务器段和客户端。
Android进程间通信文档 PDF文档
**Android进程间通信(IPC):AIDL详解** 在Android系统中,进程间通信(IPC,Inter-Process Communication)是应用程序之间数据交换的关键技术。AIDL(Android Interface Definition Language)是Android提供的一...
【一图流】_02_一张图看懂 Android 进程间通信(IPC)Binder机制: 此图表述了Android系统_进程间通信(IPC)机制全部体系,其中重点放在 Android系统中 重用 的 Binder机制 上,详尽细致,希望对大家有用;
本示例“android进程间通信测试代码”主要探讨了一种非AIDL(Android Interface Definition Language)方式来实现进程间通信,即通过序列化对象Parcel进行数据传递。 一、Android进程间通信基础 Android系统为了...
2. 错误处理:由于进程间通信可能会失败,因此需要处理可能的异常情况,如远程服务未找到、连接失败等。 3. 性能考虑:进程间通信比本地方法调用开销大,因此避免不必要的跨进程通信,优化数据传输。 综上所述,...