`
huangqinqin
  • 浏览: 367328 次
  • 性别: Icon_minigender_2
  • 来自: 福州
社区版块
存档分类
最新评论

AIDL代码示例

阅读更多
1. ITaskCallback.aidl    

package com.cmcc.demo;    

interface ITaskCallback {    

    void actionPerformed(int actionId);    

}  
 

2. ITaskBinder.aidl    

package com.cmcc.demo;  

import com.cmcc.demo.ITaskCallback;  

interface ITaskBinder {    

    boolean isTaskRunning();    

    void stopRunningTask();  

    void registerCallback(ITaskCallback cb);

    void unregisterCallback(ITaskCallback cb);  
 
}  
 

3.  MyService.java  
 

package com.cmcc.demo;   

import android.app.Service;    

import android.content.Intent;    

import android.os.IBinder;    

import android.os.RemoteCallbackList;   

import android.os.RemoteException;   

import android.util.Log;    

public class MyService extends Service {  
    @Override 

    public void onCreate() {    

        printf("service create");   

    }  
 

    @Override  

    public void onStart(Intent intent, int startId) {  

        printf("service start id=" + startId);   

        callback(startId);  

    }     

 

    @Override  

    public IBinder onBind(Intent t) {   

        printf("service on bind");    

        return mBinder;   

    }    

    @Override  

    public void onDestroy() {    

        printf("service on destroy");   

        super.onDestroy();    

    }    

    @Override 
    public boolean onUnbind(Intent intent) {  
        printf("service on unbind");  

        return super.onUnbind(intent);  
    }  

    public void onRebind(Intent intent) { 

        printf("service on rebind");   

        super.onRebind(intent);   

    }  

    private void printf(String str) {    

        Log.e("TAG", "###################------ " + str + "------");  
    }  


    void callback(int val) {    

        final int N = mCallbacks.beginBroadcast();   

        for (int i=0; i<N; i++) {    

            try {   mCallbacks.getBroadcastItem(i).actionPerformed(val);    

            } catch (RemoteException e) {  

                // The RemoteCallbackList will take care of removing  

                // the dead object for us.  
            }  

        }    

        mCallbacks.finishBroadcast();    

    }  

  private final ITaskBinder.Stub mBinder = new ITaskBinder.Stub() {  

        public void stopRunningTask() {   

        }    

        public boolean isTaskRunning() {  
            return false;  
        }   

        public void registerCallback(ITaskCallback cb) {   

            if (cb != null) mCallbacks.register(cb);  

        }  

 

        public void unregisterCallback(ITaskCallback cb) {   

            if (cb != null) mCallbacks.unregister(cb);  

        }   

    };         

    final RemoteCallbackList<ITaskCallback> mCallbacks   
        = new RemoteCallbackList<ITaskCallback>();   

}  

 

   

 

4. MyActivity.java  
 

package com.cmcc.demo;   

import android.app.Activity; 
import android.content.ComponentName;  
import android.content.Context;  
import android.content.Intent;  
import android.content.ServiceConnection;  
import android.graphics.Color;  
import android.os.Bundle;  
import android.os.IBinder;  
import android.os.RemoteException;  
import android.util.Log;  
import android.view.View;  
import android.view.ViewGroup;  
import android.view.View.OnClickListener;
import android.widget.AbsoluteLayout;    
import android.widget.Button;  
import android.widget.LinearLayout;  
import android.widget.RelativeLayout;
import android.widget.TextView;    
import java.io.BufferedReader;  
import java.io.File;    
import java.io.FileOutputStream;    
import java.io.FileReader;    
import java.io.PrintWriter;  
public class MyActivity extends Activity { 

    private Button btnOk;   

    private Button btnCancel;    

    @Override 
    public void onCreate(Bundle icicle) { 
        super.onCreate(icicle);  
        setContentView(R.layout.test_service);  

        btnOk = (Button)findViewById(R.id.btn_ok);    

        btnCancel = (Button)findViewById(R.id.btn_cancel);    

        btnOk.setText("Start Service");    

        btnCancel.setTag("Stop Service");   

        btnOk.setOnClickListener(new OnClickListener() {    

            public void onClick(View v) {    

                onOkClick();   

            }    

        });  

        btnCancel.setOnClickListener(new OnClickListener() {   

            public void onClick(View v) {    

                onCancelClick();    

            }   

        });    

    }  


    void onOkClick() {    

        Bundle args = new Bundle();    

        Intent intent = new Intent(this, MyService.class); 

        intent.putExtras(args);    

        //printf("send intent to start");  

        //startService(intent);  

        bindService(intent, mConnection, Context.BIND_AUTO_CREATE);  

        startService(intent);  

    }  


    void onCancelClick() {  

        Intent intent = new Intent(this, MyService.class);    

        //printf("send intent to stop");    

        unbindService(mConnection);  
        //stopService(intent);    
    }  

    private void printf(String str) {  
        Log.e("TAG", "###################------ " + str + "------");    

    }  


   ITaskBinder mService;  
 

  private ServiceConnection mConnection = new ServiceConnection() {  

        public void onServiceConnected(ComponentName className,  

                IBinder service) { 

            mService = ITaskBinder.Stub.asInterface(service);  
            try {  
                mService.registerCallback(mCallback); 

            } catch (RemoteException e) {  
            }  

        }  

 

      public void onServiceDisconnected(ComponentName className) {   

            mService = null;    

        }    

    };  

    private ITaskCallback mCallback = new ITaskCallback.Stub() {

        public void actionPerformed(int id) {    

            printf("callback id=" + id);    

        }    

    };   


分享到:
评论

相关推荐

    aidl 代码示例

    **Android Interface Definition Language (AIDL) 代码示例解析** 在Android开发中,当需要在应用程序的不同组件之间进行跨进程通信(IPC,Inter-Process Communication)时,AIDL(Android Interface Definition ...

    aidl使用示例代码

    标题"aidl使用示例代码"所指的,就是展示了一个实际的AIDL使用案例,帮助开发者理解如何在项目中应用AIDL。这个示例可能包括以下几个关键部分: 1. **定义AIDL接口**: 在一个`.aidl`文件中,开发者定义了服务需要...

    Android AIDL示例代码.zip

    这个“Android AIDL示例代码.zip”压缩包中包含了丰富的示例和解释,旨在帮助开发者更好地理解和运用AIDL。 AIDL的基本概念: 1. **接口定义**:AIDL用于定义接口,这些接口描述了服务提供的方法。接口定义文件以`....

    Android AIDL 示例代码

    本示例代码将展示如何使用AIDL来创建服务并进行进程间的交互。 首先,我们需要了解AIDL的基本概念。AIDL定义了一种接口,它类似于Java接口,但增加了类型安全和进程边界的支持。当你在AIDL文件中声明一个方法,...

    跨进程访问 aidl 客户端示例

    本示例"跨进程访问 aidl 客户端示例"正是为了演示如何运用AIDL来实现这一功能。 首先,AIDL的基本概念是定义一个接口文件,这个接口文件包含了客户端和服务端需要共享的方法声明。这些方法声明遵循Java语法,但有...

    AIDL简单的示例代码

    本示例代码"AIDL简单的示例代码"旨在展示如何在Android项目中使用AIDL。首先,我们需要创建一个AIDL文件,它以`.aidl`为扩展名。例如,我们可能会创建一个名为`ICalculator.aidl`的文件,内容如下: ```aidl ...

    AIDLDemo的代码示例

    在这个"AIDLDemo"的代码示例中,我们将探讨如何通过AIDL来创建服务端(Server)和客户端(Client),以及如何进行权限检测,以确保安全的跨进程数据交换。** ### 1. AIDL基本概念 AIDL允许你在Android应用中定义一...

    android之AIDL示例代码

    本示例代码包含"Server.zip"和"Client.zip"两个部分,分别代表服务端和服务客户端,通过AIDL展示了如何在Android中实现服务间的通信,并且还涵盖了如何传递对象。 1. **AIDL基础**:AIDL文件本质上是接口定义文件,...

    安卓Service和AIDL使用示例代码

    本示例代码将探讨如何在Android应用中使用Service和AIDL。 1. **Service基础** - **Service生命周期**:Service有其特定的生命周期,包括onCreate(), onStartCommand(), onBind(), onRebind(), onUnbind(), 和 ...

    AIDL示例代码

    本示例代码包括服务端(AIDLService)和客户端(AIDLClient)的实现,以详细展示AIDL的工作流程。** ### AIDL的基本概念 1. **接口定义**: 在AIDL中,你需要创建一个`.aidl`文件,定义服务提供的接口。接口中的方法...

    AIDL使用示例Demo

    这个"AIDL使用示例Demo"是帮助开发者理解和实践AIDL的一个实例项目。 首先,我们需要理解AIDL的基本概念。AIDL文件定义了接口,这个接口是客户端和服务端进行通信的合同。它使用类似于Java的方法签名来声明方法,...

    Android AIDL Demo示例代码

    2. **代码复杂性**:引入AIDL会增加代码量,尤其是处理数据类型的序列化和反序列化。 3. **生命周期管理**:服务端需妥善处理 Binder 对象的生命周期,防止内存泄漏。 **AIDL使用注意事项** 1. **数据类型限制**:...

    AIDL使用示例.zip

    示例代码: 服务端: ```java public class AidlService extends Service { private IAidlInterface.Stub binder = new IAidlInterface.Stub() { @Override public String doSomething(String input) throws ...

    AIDL代码实例

    在提供的文件`AIDLClient.zip`和`AIDLServer.zip`中,我们可以看到一个简单的AIDL服务示例: 1. **AIDLServer**:这是服务端应用,它包含一个实现了AIDL接口的服务。服务端需要做以下几步: - 定义AIDL接口:例如`...

    AIDL使用示例,实例代码

    本示例提供了AIDL的实际应用,包括服务端和客户端两个工程,通过一个简单的求和功能来展示AIDL的工作原理。** ### 1. AIDL简介 AIDL 是 Android 平台上用于在不同进程间定义接口的工具,它允许应用程序组件在不同的...

    AIDL客户端和服务端代码示例

    在这个"AIDL客户端和服务端代码示例"中,我们将深入探讨如何使用AIDL来构建服务端和客户端,以及它们之间的交互流程。 首先,理解AIDL的基本概念。AIDL文件是一种接口定义文件,它使用类似Java的语法来声明方法,...

    AIDL简单使用示例代码

    在本示例中,我们将探讨"AIDL简单使用"的代码实践。 首先,我们需要了解AIDL的基本结构。AIDL文件是`.aidl`格式,它定义了一个接口,该接口包含了服务和客户端之间可以调用的方法。下面是一个简单的AIDL接口示例: ...

    Android service aidl编写示例(Android Studio/eclipse)

    压缩包中的`Servicetest_android_studio.zip`和`Servicetest_eclipse.zip`可能包含了完整的Service和AIDL开发示例。这些示例可能包括了Service的实现、AIDL接口的定义以及如何在客户端调用服务端的方法。解压后,你...

    AIDL binder client service 示例代码

    AIDL binder 在studio学习示例 在studio上创建AIDLservice 在studio上创建AIDLclient 两个project通过AIDL binder示例 AIDLservice打印 E onStart: ---- E attemptToBindService: ---- E -new----------...

Global site tag (gtag.js) - Google Analytics