我的第一个AIDL程序

今天阅读Android源码,看到文件SystemUIService.java (frameworks\base\packages\systemui\src\com\android\systemui)

    @Override
    public void onCreate() {
        // Pick status bar or system bar.
        IWindowManager wm = IWindowManager.Stub.asInterface(
                ServiceManager.getService(Context.WINDOW_SERVICE));
        try {
            SERVICES[0] = wm.canStatusBarHide()
                    ? R.string.config_statusBarComponent
                    : R.string.config_systemBarComponent;
        } catch (RemoteException e) {
            Slog.w(TAG, "Failing checking whether status bar can hide", e);
        }

为了更好的理解代码,于是自己也想写一个AIDL的程序。

[1]建立一个工程Leader01_aidl


IMyservice.aidl
package blog.topicmmi.test;
interface IMyService{
   String getValue();
}

MyService.java

package blog.topicmmi.test;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;


public class MyService extends Service
{


  public class MyServiceImpl extends IMyService.Stub
  {
@Override
public String getValue() throws RemoteException
{
return  "我的第一个AIDL程序";
}  
  }
  
  @Override
  public IBinder onBind(Intent intent)
  {
 return new MyServiceImpl();
  }
}

AndroidManifest.xml
        <service android:name=".MyService">
            <intent-filter>
                <action android:name="blog.topicmmi.test.IMyService"/>
            </intent-filter>
        </service>


[2]再建立一个客户端的工程Leader_aidlclient

将Leader01_aidl\gen\blog拷到leader_aidlclient\src



Main.java
package net.blogjava.mobile;
import blog.topicmmi.test.IMyService;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;


public class Main extends Activity implements OnClickListener
{
private IMyService myService = null;
private Button btnInvokeAIDLService;
private Button btnBindAIDLService; 
private TextView textView;
private ServiceConnection serviceConnection = new ServiceConnection()
{

// 当与service的连接建立后被调用
@Override
public void onServiceConnected(ComponentName name, IBinder service)
{
myService = IMyService.Stub.asInterface(service);
btnInvokeAIDLService.setEnabled(true);


}


@Override
public void onServiceDisconnected(ComponentName name)
{
// TODO Auto-generated method stub


}
};


@Override
public void onClick(View view)
{
switch (view.getId())
{
case R.id.btnBindAIDLService:
//bindService()绑定到一个service.Android系统调用service的onBind()方法,它返回一个用来与service交互的IBinder.
//bindService()会立即返回,它不会返回IBinder给客户端.要接收IBinder,客户端必须创建一个ServiceConnection的实例并传给bindService().
//ServiceConnection包含一个回调方法,系统调用这个方法来传递要返回的IBinder.
bindService(new Intent("blog.topicmmi.test.IMyService"),
serviceConnection, Context.BIND_AUTO_CREATE);
break;


case R.id.btnInvokeAIDLService:
try
{
textView.setText(myService.getValue());
}
catch (Exception e)
{


}
break;
}




}


@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnInvokeAIDLService = (Button) findViewById(R.id.btnInvokeAIDLService);
btnBindAIDLService = (Button) findViewById(R.id.btnBindAIDLService);
btnInvokeAIDLService.setEnabled(false);
textView = (TextView) findViewById(R.id.textview);
btnInvokeAIDLService.setOnClickListener(this);
btnBindAIDLService.setOnClickListener(this);
}
}


[3]运行后


点“绑定AIDL服务”按钮后”调用AIDL服务"会反显.再点”调用AIDL服务"按钮:

心得:无论多容易的事情,都要在代码上实践一下,这样容易记住!

完整源码地址:http://download.csdn.net/detail/topicdev/5247556

点击打开链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值