package com.wissen.testApp.service;php
public class MyService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}java
@Override
public void onCreate() {
super.onCreate();
Toast.makeText(this, 「Service created…」, Toast.LENGTH_LONG).show();
}android
@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(this, 「Service destroyed…」, Toast.LENGTH_LONG).show();
}
}eclipse
上例中的這個Service主要作了這些事:當服務建立和銷燬時經過界面消息提示用戶。
如Android中的其它部件同樣, Service也會和一系列Intent關聯。Service的運行入口須要在AndroidManifest.xml中進行配置,以下:ide
以後咱們的Service就能夠被其餘代碼所使用了。
..
Intent serviceIntent = new Intent();
serviceIntent.setAction(」com.wissen.testApp.service.MY_SERVICE」);
startService(serviceIntent);
..工具
以上代碼調用了startService方法,Service會持續運行,直到調用stopService()或stopSelf()方法。
還有另外一種綁定Service的方式:this
…
ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i(」INFO」, 「Service bound 「);
}插件
@Override
public void onServiceDisconnected(ComponentName arg0) {
Log.i(」INFO」, 「Service Unbound 「);
}
};xml
bindService(new Intent(」com.wissen.testApp.service.MY_SERVICE」), conn, Context.BIND_AUTO_CREATE);
…對象
當應用程序綁定一個Service後,該應用程序和Service之間就能進行互相通訊,一般,這種通訊的完成依靠於咱們定義的一些接口,請看下例:
package com.wissen.testApp;
public interface IMyService {
public int getStatusCode();
}
package com.wissen.testApp;
interface IMyRemoteService {
int getStatusCode();
}
若是你正在使用eclipse的 Android插件,則它會根據這個aidl文件生成一個Java接口類。生成的接口類中會有一個內部類Stub類,你要作的事就是去繼承該Stub類:
package com.wissen.testApp;
class RemoteService implements Service {
int statusCode;
@Override
public IBinder onBind(Intent arg0) {
return myRemoteServiceStub;
}
private IMyRemoteService.Stub myRemoteServiceStub = new IMyRemoteService.Stub() {
public int getStatusCode() throws RemoteException {
return 0;
}
};
…
}
當客戶端應用鏈接到這個Service時,onServiceConnected方法將被調用,客戶端就能夠得到IBinder對象。參看下面的客戶端onServiceConnected方法:
…
ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
IMyRemoteService myRemoteService = IMyRemoteService.Stub.asInterface(service);
try {
statusCode = myRemoteService.getStatusCode();
} catch(RemoteException e) {
// handle exception
}
Log.i(」INFO」, 「Service bound 「);
}
…
};
權限:
咱們能夠在AndroidManifest.xml文件中使用
以後應用程序要訪問該Service的話就須要使用