`

使用android中的AIDL让Service与Activity通信[转]

阅读更多

http://linconz.net/archives/229.html

http://linconz.net/archives/314.html

首先建立一个ICallback.aidl文件,作为Activity中的回调方法

  1. package com.zhang.test.service;  
  2.   
  3. interface ICallback {  
  4. void showResult(int result);  
  5. }  

然后再建立一个IService.aidl用来在Activity中接收Service回调,以及在Service中onBind时返回的Binder
注意:aidl中import不能写com.xxx.*,要写全类的路径

  1. package com.zhang.test.service;  
  2.   
  3. import com.zhang.test.service.ICallback;  
  4.   
  5. interface IService {  
  6.     void registerCallback(ICallback cb);  
  7.     void unregisterCallback(ICallback cb);  
  8. }  

接下来是service:
MainService.java

  1. package com.zhang.test.service;  
  2.   
  3. import android.app.Service;  
  4. import android.content.Intent;  
  5. import android.os.Handler;  
  6. import android.os.IBinder;  
  7. import android.os.Message;  
  8. import android.os.RemoteCallbackList;  
  9. import android.os.RemoteException;  
  10. import android.util.Log;  
  11.   
  12. public class MainService extends Service {  
  13.   
  14.     private static final String TAG = "MainService";  
  15.   
  16.     private RemoteCallbackList<icallback> mCallbacks = new RemoteCallbackList<icallback>();  
  17.   
  18.     private IService.Stub mBinder = new IService.Stub() {  
  19.   
  20.         @Override  
  21.         public void unregisterCallback(ICallback cb){  
  22.             if(cb != null) {  
  23.                 mCallbacks.unregister(cb);  
  24.             }  
  25.         }  
  26.   
  27.         @Override  
  28.         public void registerCallback(ICallback cb){  
  29.             if(cb != null) {  
  30.                 mCallbacks.register(cb);  
  31.             }  
  32.         }  
  33.     };  
  34.   
  35.     @Override  
  36.     public IBinder onBind(Intent intent) {  
  37.         Log.d(TAG, "onBind");  
  38.         return mBinder;  
  39.     }  
  40.   
  41.     @Override  
  42.     public void onCreate() {  
  43.         Log.d(TAG, "onCreate");  
  44.         //这里不知道为什么,直接使用callback方法回调showResult  
  45.         //mCallbacks.beginBroadcast()是0,需要用handler延迟1000毫秒  
  46.         //也许是在activity中binService太耗时的原因?  
  47.         mHandler.sendEmptyMessageDelayed(01000);  
  48.         super.onCreate();  
  49.     }  
  50.   
  51.     @Override  
  52.     public void onDestroy() {  
  53.         mHandler.removeMessages(0);  
  54.         mCallbacks.kill();  
  55.         super.onDestroy();  
  56.     }  
  57.   
  58.     private void callBack() {  
  59.         int
    分享到:
    评论

相关推荐

    Activity中使用AIDL让Service与Activity通信

    本文将深入探讨如何在Activity中使用AIDL来让Service与Activity进行通信。 首先,我们需要了解AIDL的基本概念。AIDL是一种特殊的接口定义语言,它允许Android系统生成必要的Java绑定类和代理对象,以便在不同的进程...

    android 本地服务通信 AIDL service服务与activity之间的通信

    本示例“android 本地服务通信 AIDL service服务与activity之间的通信”通过一个学号查询学生的例子,清晰地展示了如何利用AIDL实现在Activity和Service之间的数据传递。 首先,我们需要了解AIDL的基本概念。AIDL...

    AIDL Demo源码实现Activity与Service进程间通信

    当一个Service在不同的进程中运行时,如果需要与Activity通信,就需要使用AIDL来定义接口并实现跨进程调用。 下面是一步步实现AIDL Demo的过程: 1. **创建AIDL接口**: 在项目的`src/main/aidl`目录下创建一个新...

    Activity和Service生命周期及使用AIDL通信实例备份

    本篇将深入探讨Activity和Service的生命周期以及如何利用Android Interface Definition Language (AIDL)进行进程间通信。 Activity是Android应用程序的用户界面,它负责与用户交互。Activity的生命周期分为几个关键...

    通过aidl service调用activity

    总结,通过AIDL,我们可以使Service与Activity在不同进程中相互通信,实现跨进程调用。同时,Service还可以通过Intent启动Activity。在实际开发中,需要注意跨进程通信的安全性和效率,合理设计接口,以提供高效且...

    aidl.rar_AIDL_AIDL.rar_android AIDL service_android service_andr

    AIDL(Android Interface Definition Language)是Android系统提供的一种接口定义语言,用于在不同进程间进行通信,特别是当服务(Service)需要与客户端(如Activity)跨进程交互时。AIDL帮助开发者定义接口,使得...

    aidl双向通信,Service加回调刷新自身Activity

    AIDL是用来定义接口的,这些接口可以让一个Android进程调用另一个进程中对象的方法,从而实现跨进程通信。通常,AIDL用于服务(Service)与客户端(如Activity)之间的数据交换。在单向通信中,服务执行某些操作并...

    android中aidl的基本应用

    描述 :整理了下android中的aidl, 项目中主要是用作于Activity和Service之间进行跨进程的通信和调用,定义了几种基本类型的接口,其中涵盖了自定义参数类型的传递。 注意: 解压后有两个android程序,一个client端 ...

    Service与Activity通信示例

    本示例将深入探讨这个主题,帮助开发者更好地掌握Android中的Service和Activity通信机制。 首先,我们要了解Service的基本概念。Service是一种没有用户界面的组件,它可以在后台运行,执行任务,如播放音乐、处理...

    Android Studio AIDL实现跨进程通信

    本篇文章将深入探讨如何在Android Studio中使用AIDL来实现跨进程通信。 首先,我们需要理解AIDL的基本概念。AIDL是一种接口定义语言,它允许开发者声明服务端提供的接口,客户端通过这些接口调用服务端的方法,实现...

    Android开发-Activity与Service使用Messenger通信代码

    本文将详细讲解如何在Android中通过Messenger实现在Activity和Service之间的通信。 Messenger是一种轻量级的IPC机制,它基于Handler和Message,允许两个不同进程中的对象之间发送消息。在这个例子...

    android中aidl的使用

    在Android系统中,AIDL(Android Interface Definition Language)是用于定义跨进程通信(IPC, Interprocess Communication)接口的一种语言。通过AIDL,开发者可以创建服务(Service),使得其他应用程序组件能够与...

    Activity与远程Service通信,使用AIDL

    在Android开发中,Activity与Service之间的通信是应用中常见的需求,尤其当Service运行在远程进程中时,这种通信机制显得尤为重要。AIDL(Android Interface Definition Language)是Android提供的一种接口定义语言...

    进程内Activity和service使用Binder通信代码备份

    3. Activity绑定Service并使用Binder:在Activity中,我们可以通过bindService()方法绑定到Service,并在onServiceConnected()回调中获取到Binder对象。之后就可以调用Service中定义的方法了。 ```java public ...

    service与activity之间的通信

    二、Service与Activity通信方式 1. startService(): 当Activity启动Service时,可以通过Intent传递数据。Service在onStartCommand()方法中接收这些数据,处理完任务后通过BroadcastReceiver或者返回结果到调用start...

    Android AIDL使用详解

    Android AIDL(Android Interface Definition Language)是Android系统提供的一种接口定义语言,用于处理不同进程间的通信(IPC: Interprocess Communication)。在Android应用开发中,当需要在不同的应用程序组件...

    android aidl 之 system service 架构

    总结起来,AIDL在Android System Service架构中扮演着桥梁的角色,它使得系统服务能够跨越进程边界,为整个Android生态系统提供稳定且高效的通信机制。通过对AIDL的深入理解和应用,开发者可以充分利用系统服务的...

    Android AIDL使用例子

    在Android系统中,AIDL(Android Interface Definition Language)是一种用于实现进程间通信(Inter-Process Communication, IPC)的工具。AIDL使得不同进程间的组件能够相互通信,即便它们运行在不同的应用程序或...

    Android的IPC与AIDL

    通过以上步骤,我们实现了Activity与Service之间的简单通信,展示了如何使用IBinder和AIDL实现进程间的通信过程。 #### 五、总结 Android的IPC机制是其架构设计中的一个重要组成部分,它不仅提高了应用的安全性和...

Global site tag (gtag.js) - Google Analytics