服务(Service)的使用方法

/**
 * 服务的基本用法
 *
 * ******定义一个服务
 * 继承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;
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值