プロジェクトは、サーバ部分への接続を作成する必要があり、サービスモジュールのjarファイルを生成します。このパッケージにより、その他の製品は、サーバ・アプリケーションを開発素早く接続することができます。利点があるサービスを行います。
1。背景には、あなたは常にサーバへの接続を維持することができます
2。唯一の外部インタフェースを提供できるサービスは、特定の機能は、社内のサービスを実施しています
3。プロジェクトコードの結合を増加
私はいくつかのサードパーティのjarパッケージの外観を使用するSDKを開きます。
これは、ジャーパケット音声認識SDKのマイクロ手紙の内容です
私たちは、一般的なSDKのコースを開発し、サービスを開始bingserviceの方法によって開始されたリモートサービスの定義です。
同時に、通信アプリケーションおよびサービスの方法は、Messengerを持っているとAIDLは、それの特定の物品との間の違いを見てください。
私たちは、SDKを開発するためにここにいるので、AIDLを使用することを選択したあなたのSDKがどんなサービスが含まれていない場合には、当然のことながら、子供のようなものはありません。
今の例を説明し、サービスコールプロセスを作成します。機能の例としては、サービスの数値を設定し、内部サービスから読み出すことです。2つのアクションをトリガするために2つの以上のボタンを配置するための主なインタフェースは、呼び出しの結果は、logcatに表示されています。
最初のプロジェクトを作成し、その後、次のプロジェクトのSRCでパッケージを作成AIDLファイルを配置するためのサービスのためのコードだけでなく、パッケージを配置します。ターンではバッグやAIDLサービスクラスファイル内に配置。次のように、作成した後。
次のようにどのCloudServiceInterface.aidl文書が読み取ります。
packagecom.rayleigh.aidl;
interfaceCloudServiceInterface {
SETINFO(intperson)を無効に。
int型はgetinfo();
}
次のようにCloudService.javaファイルは読み取ります。
packagecom.rayleigh.cloud;
importcom.rayleigh.aidl.CloudServiceInterface;
輸入android.app.Service。
importandroid.content.Intent;
importandroid.os.IBinder;
importandroid.util.Log;
publicclass CloudService extends Service {
private int testdata = 0;
public CloudService() {
}
private static final StringTAG="Test";
@Override
public void onCreate()
{
Log.i(TAG, "ServiceonCreate--->");
//TODO:register broadcast
//// TODO: 2016/12/18 or start do something
super.onCreate();
}
@Override
public int onStartCommand(Intent intent,int flags, int startId) {
// return super.onStartCommand(intent,flags, startId);
return START_STICKY;
}
@Override
public void onDestroy()
{
Log.i(TAG, "ServiceonDestroy--->");
//TODO: unregister broadcast
super.onDestroy();
}
@Override
public boolean onUnbind(Intent intent) {
Log.i(TAG, "Serviceonunbind--->");
return super.onUnbind(intent);
}
@Override
public void onRebind(Intent intent) {
Log.i(TAG, "Serviceonrebond--->");
super.onRebind(intent);
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communicationchannel to the service.
// throw new UnsupportedOperationException("Notyet implemented");
return mBinder;
}
private final CloudServiceInterface.StubmBinder = new CloudServiceInterface.Stub() {
@Override
public void setInfo(int person) {
testdata = person;
}
@Override
public int getInfo() {
return testdata;
}
};
}
然后点击project->clean,来编译项目。就会在gen目录里生成了CloudServiceInterface.aidl所用对应的CloudServiceInterface.java。如下:
然后在AndroidMannifest.xml里面添加服务声明:
<service
android:name="com.rayleigh.cloud.CloudService"
android:process=":remote"
>
<intent-filter >
<action
android:name="com.rayleigh.cloud.CloudService"/>
</intent-filter>
</service>
然后在MainActivity.java里面定义服务对象:
CloudServiceInterfacemService;
private ServiceConnectionserviceConnection =new ServiceConnection() {
@Override
publicvoid onServiceConnected(ComponentName componentName,IBinder iBinder) {
Log.e("on","on service connected");
mService = CloudServiceInterface.Stub.asInterface(iBinder);
}
@Override
publicvoid onServiceDisconnected(ComponentName componentName) {
Log.e("on","on service disconnected");
mService = null;
}
};
然后调用bindService函数启用服务。我定义成函数如下:
private void connectionToService() {
Intent intent=newIntent(MainActivity.this,CloudService.class);
this.getApplicationContext().bindService(intent,serviceConnection,Context.BIND_AUTO_CREATE);
}
在onCreate里面调用此函数。
最后onCreate里面的内容如下:
@Override
protected void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startBtn = (Button)findViewById(R.id.StartBtn);
stopBtn = (Button) findViewById(R.id.StopBtn);
startBtn.setOnClickListener(listener);
stopBtn.setOnClickListener(listener);
connectionToService();
}
其中按键点击响应函数如下:
private View.OnClickListener listener = newView.OnClickListener()
{
@Override
public void onClick(Viewv)
{
switch (v.getId())
{
case R.id.StartBtn:
if (mService != null){
try {
mService.setInfo(3);
Log.e("mainactivity","setvalue success");
} catch (Exceptione){
}
} else {
Log.e("mainactivity","mServiceis null");
}
break;
case R.id.StopBtn:
if (mService != null){
try {
int a= mService.getInfo();
Log.e("mainactivity","getvalue is :"+ a);
} catch (Exceptione) {
}
} else {
Log.e("mainactivity","mServiceis null");
}
break;
default:
break;
}
}
};
分别点击两个按键来,设置数字到服务里,和从服务里获取数据
这个例子很简单,看代码就可以了
转载于:https://www.jianshu.com/p/934246808bc6