当前位置: 首页 > news >正文

深圳宝安区做网站的公司廊坊百度提升优化

深圳宝安区做网站的公司,廊坊百度提升优化,福州seo经理招聘,做交友网站挣钱吗目录 5、 谁来写Proxy及Stub类呢? 如何考虑人的分工 IA接口知识取得的难题 在编程上,有什么技术可以实现这个方法? 范例 5、 谁来写Proxy及Stub类呢? -- 强龙提供AIDL工具,给地头蛇产出Proxy和Stub类 如何考虑人的分工 由框架开发者…

目录

5、 谁来写Proxy及Stub类呢?

如何考虑人的分工

IA接口知识取得的难题

在编程上,有什么技术可以实现这个方法?

范例


5、 谁来写Proxy及Stub类呢?

       -- 强龙提供AIDL工具,给地头蛇产出Proxy和Stub类

如何考虑人的分工
  • 由框架开发者来撰写Proxy-Stub类,才能减轻开发者的负担。
  • 框架分为: <天子框架>和<曹操框架>。
  • 因此, 应该由两者(天子或曹操)之一来撰写Proxy-Stub类。
     
IA接口知识取得的难题
  • 但是,有个难题: IA接口(如下图所示)的内容必须等到<买主>来了才会知道。
  • 在框架开发阶段,买主还没来, IA接口的知识无法取得,又如何定义IA接口呢? 没有IA接口定义,又如何撰写Stub和Proxy类呢?

 

  • 好办法是:

“强龙(天子或曹操)撰写代码(在先) ;然后地头蛇(App开发者)定义接口(在后)。 ”

在编程上,有什么技术可以实现这个方法?

技术之一是: 類別模板(class template)例如,强龙撰写模板:
 

template< class T >
class SomeClass
{private:T data;public:SomeClass() { }void set(T da){ data = da; }
};
  • 地头蛇利用模板来生成一个类:

        SomeClass<Integer> x;

由于接口(interface)是一种特殊的类(class),所以也可以定义模板如下:

 

template<interface I>class BinderProxy{// ………};
  • 地头蛇利用模板来生成一个类:
  • 除了模板之外,还有其它编程技术可以实现<强龙写代码,地头蛇定义接口>的方案吗?
  • 答案是:
       程序生成器(program generator)
       例如: Android的aidl.exe

AIDL

  • AIDL的目的是定义Proxy/Stub来封装IBinder接口,以便产生更亲切贴心的新接口。
  • •所以,在应用程序里,可以选择使用IBinder接口,也可以使用AIDL来定义出接口。
  • AIDL的目的是定义Proxy/Stub来封装IBinder接口,以便产生更亲切贴心的新接口。
  • 所以,在应用程序里,可以选择使用IBinder接口,也可以使用AIDL来定义出新接口。由于IBinder接口只提供单一函数(即transact()函数)来进行远距通信,呼叫起来比较不方便。
  • 所以Android提供aidl.exe工具来协助产出Proxy和Stub类别,以化解这个困难。
  • 只要你善于使用开发环境的工具(如Android的aidl.exe软件工具)自动产生Proxy和Stub类别的程序代码;那就很方便
    了。
     
范例
  • 此范例使用Android-SDK的/tools/里的aidl.exe工具程序,根据接口定义档(如下述的mp3PlayerInterface.aidl)而自动产出Proxy及Stub类别,其结构如下:

 

  • 藉由开发工具自动产出Proxy及Stub类的代码,再分别转交给ac01和mp3Binder开发者。此范例程序执行时,出现画面如下:
  • 依据UI画面的两项功能: <Play>和< Stop>,以Java定义接口,如下的代码:
// mp3PlayerInterface.aidl
interface mp3PlayerInterface mp3PlayerInterface{void play();void stop();
}
  • 使用Android-SDK所含的aidl.exe工具,将上述的mp3PlayerInterface.aidl档翻译成为下述的mp3PlayerInterface.java档案。
// mp3PlayerInterface.java
/*
* This file is auto-generated. DO NOT MODIFY.
* Original file: mp3PlayerInterface.aidl
*/
// ………
public interface mp3PlayerInterface extends android.os.IInterface
{/** Local-side IPC implementation stub class. */public static abstract class Stub extends android.os.Binder implements com.misoo.pkgx.mp3PlayerInterface{// ……….public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException{switch (code){case INTERFACE_TRANSACTION:{reply.writeString(DESCRIPTOR);return true;}case TRANSACTION_play:{data.enforceInterface(DESCRIPTOR);this.play();reply.writeNoException();return true;}case TRANSACTION_stop:{data.enforceInterface(DESCRIPTOR);this.stop();reply.writeNoException();return true;}}return super.onTransact(code, data, reply, flags);}private static class Proxy implements com.misoo.pkgx.mp3PlayerInterface{private android.os.IBinder mRemote;//………….public void play() throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();try {_data.writeInterfaceToken(DESCRIPTOR);mRemote.transact(Stub.TRANSACTION_play, _data, _reply, 0);_reply.readException();}finally {_reply.recycle();_data.recycle();} }}public void stop() throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();try {_data.writeInterfaceToken(DESCRIPTOR);mRemote.transact(Stub.TRANSACTION_stop, _data, _reply, 0);_reply.readException();}finally {_reply.recycle();_data.recycle();}}static final int TRANSACTION_play = (IBinder.FIRST_CALL_TRANSACTION + 0);static final int TRANSACTION_stop = (IBinder.FIRST_CALL_TRANSACTION + 1);}public void play() throws android.os.RemoteException;public void stop() throws android.os.RemoteException;
}
  • 表面上,此mp3PlayerInterface.java是蛮复杂的,其实它的结构是清晰又简单的,只要对于类继承、反向調用和接口等面向对象观念有足够的认识,就很容易理解了。
// mp3Binder.java
package com.misoo.pkgx;
import android.content.Context;
import android.media.MediaPlayer;
import android.util.Log;public class mp3Binder extends mp3PlayerInterface.Stub{private MediaPlayer mPlayer = null;private Context ctx;public mp3Binder(Context cx){ ctx= cx; }public void play(){if(mPlayer != null) return;mPlayer = MediaPlayer.create(ctx, R.raw.test_cbr);try { mPlayer.start();} catch (Exception e){ Log.e("StartPlay", "error: " + e.getMessage(), e); }}public void stop(){if (mPlayer != null){ mPlayer.stop(); mPlayer.release(); mPlayer = null; }}
}
  • 撰写mp3RemoteService类
     
// mp3Service.java
package com.misoo.pkgx;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;public class mp3Service extends Service {IBinder ib = null;@Override public void onCreate() {super.onCreate();ib = new mp3Binder(this.getApplicationContext());}@Override public void onDestroy() { }@Override public IBinder onBind(Intent intent) {return ib;}
}// ac01.java
// ………
public class ac01 extends Activity implements OnClickListener {//……….private PlayerProxy pProxy = null;public void onCreate(Bundle icicle) {// ………startService(new Intent("com.misoo.pkgx.REMOTE_SERVICE"));bindService(new Intent("com.misoo.pkgx.REMOTE_SERVICE"),mConnection, Context.BIND_AUTO_CREATE);}private ServiceConnection mConnection = new ServiceConnection() {public void onServiceConnected(ComponentName className,IBinder ibinder) {pProxy = mp3PlayerInterface.Stub.asInterface(ibinder);}public void onServiceDisconnected(ComponentName className) {}};public void onClick(View v) {switch (v.getId()) {case 101: pProxy.play(); tv.setText(pProxy.getStatus()); break;case 102: pProxy.stop(); tv.setText(pProxy.getStatus()); break;case 103:unbindService(mConnection);stopService(new Intent("com.misoo.pkgx.REMOTE_SERVICE"));finish(); break;}}
}
  • 对于Anrdoid的初学者而言, Android的        AIDL机制可说是最难弄懂的。
http://www.tj-hxxt.cn/news/86571.html

相关文章:

  • csdn. wordpress珠海网站建设优化
  • 织梦网站日志在哪郑州网站seo优化
  • 网站图片属性是什么竞价推广账户竞价托管收费
  • 网页效果图制作湖北网站seo
  • wordpress仪表盘关闭济南seo的排名优化
  • 有些网站为什么会有弹窗重庆关键词排名推广
  • 做网站怎么返回首页台州网站建设优化
  • 怎么做的网站怎么放上网百度推广是做什么的
  • 微信开发者平台教程整站优化网站
  • 陕西网站建设优化技术有哪些平台可以免费发广告
  • 自动建站网站源码黄冈网站推广软件免费下载
  • wordpress 会员推广插件seo推广视频隐迅推专业
  • 网站建设方案 规划东莞疫情最新通告
  • wordpress jquery报错百度手机seo软件
  • 一个刚做好的网站怎么做seo世界杯大数据
  • 福州网络推广运营佛山旺道seo优化
  • 基金网站制作百度推广首页
  • 做商品网站数据库有哪些百度seo如何优化
  • 做软件界面的网站公司产品推广方案
  • 网站怎么做地图导航站长申论
  • 广州网站建设网络推广公司百度指数数据分析平台
  • 无锡网站建设推广深圳seo公司排名
  • 德德模板网站建设步骤南昌seo服务
  • 黄冈做网站价格常州seo收费
  • 网站建设背景网上推广平台有哪些
  • c 可以用来做网站吗班级优化大师怎么下载
  • 有哪些网站是可以接单做任务的百度sem竞价
  • 如何查看网站是哪家公司做的?免费二级域名分发网站
  • 手机网站开发成本百度网站提交入口网址
  • 网站开发如何适应各分辨率公司的网站