/**
* 服务的基本用法
*
* ******定义一个服务
* 继承Service类
* 必须重写的方法是onBind
* 要完成处理事情的逻辑需要重写的类有onCreate,onStartCommand,onDestroy
*
* 启动和停止服务
* Intent startIntent=new Intent(this,FileManagerService.class);
* startService(startIntent);
* Intent stopIntent=new Intent(this,FileManagerService.class);
* stopService(stopIntent);
*
* ******活动和服务进行通信
* 在继承服务的类中需要书写的相关内容,写一个继承Binder的类,在必须重写的方法onBind中返回
* 继承Binder的类的对象:
* private ServiceBinder mBinder=new ServiceBinder();
* public class FileManagerService extends Service {
* private ServiceBinder extends Binder{
* 定义相关方法
* }
* }
* @Override
* public IBinder onBind(Intent intent){
* return mBinder;
* }
*
* *******在调用服务的类中需要完成的内容;
* 定义一个继承Binder的类的对象,再初始化一个ServiceConnection接口,初始化该接口需要重写的类
* 有onServiceDisconnected,onServiceConnected
* 在以上方法中可以通过继承Binder的类的对象调用在服务中定义的相关方法,这样就将服务和活动联系
* 在一起了,如下:
* private FileManagerService.ServiceBinder serviceBinder;
* private ServiceConnection connection=new ServiceConnection(){
* @Override
* public void onServiceDisconnected(ComponentName name{
* }
*
* @Override
* public void onServiceConnected(ComponentName name,IBinder service){
* serviceBinder=(FileManagerService.ServiceBinder)service;
* //接下来就可以调用在服务中定义的相关方法了
* }
* }
*
*最后进行服务和活动的绑定
* Intent bindIntent=new Intent(this,ServiceBinder.class);
* bindService(bindIntent,connection,BIND_AUTO_CREATE);
* 解绑
* unbindService(connection);
*/
活动中书写的绑定服务的内容:
private final ServiceConnection mServiceConnection=new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
LogUtils.d(TAG,"onServiceConnected");
mService=((FileManagerService.ServiceBinder)service).getServiceInstance();
mServiceBinded=true;
serviceConnected();
}
@Override
public void onServiceDisconnected(ComponentName name) {
mService.disconnected(this.getClass().getName());
mServiceBinded=false;
LogUtils.w(TAG,"onServiceDisconnected");
}
};
bindService(new Intent(getApplicationContext(),FileManagerService.class),
mServiceConnection,BIND_AUTO_CREATE);//绑定服务
unbindService(mServiceConnection);//解除绑定
服务中书写的内容:
import android.app.Service;
import android.os.AsyncTask;
import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;
public class FileManagerService extends Service {
private ServiceBinder mBinder=null;//用于在onBind方法中返回
@Override
public void onCreate(){
super.onCreate();
mBinder=new ServiceBinder();
AsyncTask.setDefaultExecutor(AsyncTask.THREAD_POOL_EXECUTOR);//设置AsyncTask的运行方式?
}
@Override
public int onStartCommand(Intent intent,int flags,int startId){
LogUtils.d(TAG,"onStartCommand...");
super.onStartCommand(intent,flags,startId);
return START_NOT_STICKY;
//“非粘性的”。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务
}
public class ServiceBinder extends Binder{
//这个方法得到FileServiceInstance的实例
public FileManagerService getServiceInstance(){
return FileManagerService.this;
}
}
@Override
public IBinder onBind(Intent intent){
DrmManager.getInstance().init(this);
return mBinder;
}
}
服务(Service)的使用方法
最新推荐文章于 2024-05-07 09:56:31 发布