上一章介绍了直接调用Service来操作硬件的方法,如果我们再优化一下结构,通过一个Manager来调
用这个Service的方法,可能会更好。这样Service就可以跑在后台,由于这时候service和manager是
两个进程,所以只能通过IPC来进行通信。我们在上一篇看到
public final class LedService extends ILedService.Stub { }, ILedService.Stub就是
ILedService.aidl由aidl工具自动生成的类。
我们现在看看manager是如何实现的:
frameworks/base/core/java/mokoid/hardware/ILedService.aidl
package mokoid.hardware; interface ILedService { boolean setOn(int led); boolean setOff(int led); } 该aidl文件最后能被aidl工具自动生成ILedService.java文件,提供了remotable的LedService可用
的接口setOn和setOff.
frameworks/base/core/java/mokoid/hardware/LedManager.java
public class LedManager { private static final String TAG = "LedManager"; private ILedService mLedService; public LedManager() { mLedService = ILedService.Stub.asInterface( ServiceManager.getService("led")); if (mLedService != null) { Log.i(TAG, "The LedManager object is ready."); } } public boolean LedOn(int n) { boolean result = false; try { result = mLedService.setOn(n); } catch (RemoteException e) { Log.e(TAG, "RemoteException in LedManager.LedOn:", e); } return result; } public boolean LedOff(int n) { boolean result = false; try { result = mLedService.setOff(n); } catch (RemoteException e) {
Log.e(TAG, "RemoteException in LedManager.LedOff:", e); } return result; } } 阅读更多下文请点击:http://www.hzlitai.com.cn/article/ARM11/SYSTEM/Android_HAL_kaifa5.html
|