系统服务(Service)
Services、android、linux,让人心动的功能,手机上也开发系统服务,当然,这还得归功于Linux系统内核。
眼高手底,是我经常犯的毛病,在Service是又犯了,失败。用代码说话。
创建一个Service的过程(示例) :
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
public class MyService extends Service {
private final IBinder mBinder = new MyBinder();
@Override
public void onCreate() {
super.onCreate();
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return mBinder;
}
public class MyBinder extends Binder {
MyService getServices() {
return MyService.this;
}
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
}
}
上面示例代码完成较完成的演示了如何创建一个Serivce及重量的几个方法(生命周期)。
onCreate():当第一次创建服务时,系统自动调用此方法。一般服务的的所有初始化操作代码放到此块中。
onStart(Intent intent, int startId):API文档上说此方法已经过时,推荐使用int onStartCommand (Intent intent, int flags, int startId) 。
暂时还没有搞明白onStartCommand。
OnStart()方法,当客户端启动或每次绑定服务时由系统自动调用。
onDestroy():在服务注销时系统自动调用,一些清理工作在此完成。
服务写完之后,还必须在AndroidMainifest.xml中注册。
<service android:name="cn.myandroid.MyService" />
如果服务中用到了一些权限,还必须注册相应的<uses-permission>
。
Ok,到此一个服务基本不创建完成。下面介绍如果在客户端启动一个服务。
public class MyActivity extends Activity {
private MyService mService;
private static boolean ISRUNNING = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startMyService();// 启动
}
@Override
public void onResume() {
super.onRestart();
if (ISRUNNING) {
bindMyService();
}
}
@Override
public void onDestroy() {
super.onDestroy();
// if (ISRUNNING) {
// unbindMyService();
// }
}
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
mService =
((MyService.MyBinder)service).getServices();
}
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
};
Intent intent = new Intent(MyActivity.this, MyService.class);
// 启动服务
private void startMyService() {
startService(intent);
ISRUNNING = true;
}
// 绑定
private void bindMyService() {
bindService(intent, mConnection,Context.BIND_AUTO_CREATE);
}
// 取消绑定
private void unbindMyService() {
unbindService(mConnection);
}
private void stopMyService() {
stopService(intent);
ISRUNNING = false;
}
}
上述代码展示了一个Activity(Client)如何启动并绑定一个服务的。主要是利用了Activity的生命周期来创建、绑定、取消绑定一个服务。
上面代码中没有没用调用stopMyService()退出个服务,可根据你的需要进行调用。