读书人

AIDL代码示范

发布时间: 2012-08-24 10:00:21 作者: rapoo

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);

}

};

}

读书人网 >网络基础

热点推荐