美文网首页
Android笔记-四大组件之Service

Android笔记-四大组件之Service

作者: 948d307d6ecf | 来源:发表于2018-05-12 19:00 被阅读0次

    简介

    Service,即服务,是Android系统中的后台运行程序,用来处理不需要用户界面但是需要长期运行的任务.

    标准服务

    • 生命周期

      onCreate() 方法是在服务第一次创建的时候调用,onStartCommand()方法在每次启动服务的时候都会被调用(可调用多次,但每个服务只会存在一个实例),onDestroy()方法是在服务销毁的时候调用.

    • 基本用法

      • 第一步, 自定义一个服务继承自Service类
        public class MyService  extends Service{
            private static final String TAG = "MyService";
        
            @Nullable
            @Override
            public IBinder onBind(Intent intent) {
                Log.d(TAG, "onBind() called");
                return null;
            }
        
            @Override
            public void onCreate() {
                super.onCreate();
                Log.d(TAG, "onCreate() called");
            }
        
            @Override
            public int onStartCommand(Intent intent, int flags, int startId) {
                Log.d(TAG, "onStartCommand() called");
                return super.onStartCommand(intent, flags, startId);
            }
        
            @Override
            public void onDestroy() {
                super.onDestroy();
                Log.d(TAG, "onDestroy() called");
            }
        }
        
      • 第二步, 在menifest文件中注册
        <service android:name=".service.MyService" />
        
      • 第三步, 在context(一般是Activity)中启动服务
        startService(new Intent(this, MyService.class));
        
      • 第四步, 在context(一般是Activity)停止服务
        stopService(new Intent(this, MyService.class));
        

        也可以在MyService中调用stopSelf()方法让该服务停止运行.

    • 服务与Activity交互
      以上方式只能通过在Activity中调用startService()stopService()两个方法来启动和停止服务,如果想要更加精确的控制服务,比如指挥服务做些事情以及从服务那里得到一些反馈,就需要通过Binder来完成了.

      • 第一步,自定义Binder
        public class MyBinder extends Binder {
            private static final String TAG = "MyBinder";
        
            //自定义执行任务的方法
            public void startDownload() {
                Log.d(TAG, "startDownload() called");
            }
        
            //自定义获取进度
            public int getProgress() {
               Log.d(TAG, "getProgress() called");
                return 0;
            }
        }
        
      • 第二步,自定义Service
        public class MyService  extends Service{
            private static final String TAG = "MyService";
        
            private MyBinder binder = new MyBinder();
        
            @Nullable
            @Override
            public IBinder onBind(Intent intent) {
                Log.d(TAG, "onBind() called");
                return binder;
            }
        
            @Override
            public void onCreate() {
                super.onCreate();
                Log.d(TAG, "onCreate() called");
            }
        
            @Override
            public int onStartCommand(Intent intent, int flags, int startId) {
                Log.d(TAG, "onStartCommand() called");
                return super.onStartCommand(intent, flags, startId);
            }
        
            @Override
            public void onDestroy() {
                super.onDestroy();
                Log.d(TAG, "onDestroy() called");
            }
        }
        
      • 第三步, 在menifest文件中注册
        <service android:name=".service.MyService" />
        
      • 第四步, 在Activity中初始化
        private MyBinder myBinder;
        private ServiceConnection serviceConnection = new ServiceConnection() {
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                Log.d(TAG, "onServiceConnected() called");
                myBinder = (MyBinder) service;
                
                //指挥服务去执行任务
                myBinder.startDownload();
                
                //获取服务的执行反馈
                myBinder.getProgress();
            }
        
            @Override
            public void onServiceDisconnected(ComponentName name) {
                Log.d(TAG, "onServiceDisconnected() called");
            }
        };
        
      • 第五步, 在Activity中建立绑定关系
        bindService(new Intent(this, MyService.class), this.serviceConnection, BIND_AUTO_CREATE);
        
      • 第六步, 在Activity中解除绑定关系
        unbindService(this.serviceConnection);
        
        1. onBind()方法获取Binder的示例,从而实现对binder的控制, 该方法会在onCreate()完成后执行;
        2. 只要调用方和服务的连接没有断开,服务会一直保持运行状态;
        3. 如果同时调用了startService()bindservice()方法, 则需要调用stopService()unbindService()方法才能销毁服务.

    IntentService

    • 特点

      • 执行完成自动停止
      • onHandleIntent()方法中自动开启线程
    • 使用方法

      • 新建一个类, 继承自IntentService
      public class MyIntentService extends IntentService {
          private static final String TAG = "MyIntentService";
      
          public MyIntentService() {
              super("MyIntentService");
          }
      
          @Override
          protected void onHandleIntent(@Nullable Intent intent) {
              Log.d(TAG, "onHandleIntent() called with: thread id is: [" + Thread.currentThread().getId() + "]");
          }
      
          @Override
          public void onDestroy() {
              super.onDestroy();
              Log.d(TAG, "onDestroy: ()");
          }
      }
      
      • 在menifest中注册
      <service
          android:name=".service.MyIntentService"
          android:exported="false" />
      
      • 启动
      startService(new Intent(this, MyIntentService.class));
      

    相关文章

      网友评论

          本文标题:Android笔记-四大组件之Service

          本文链接:https://www.haomeiwen.com/subject/quuhdftx.html