美文网首页
Android Service服务的基本用法

Android Service服务的基本用法

作者: 颤抖的闪电 | 来源:发表于2017-10-23 14:59 被阅读0次

    前言:说白了,其实就3步走。
    1、创建service(和Activity绑定启动时,需要创建Binder内部类);
    2、注册service;
    3,intent启动或绑定;
    具体代码如下:

    一、Service的基本启动

    1、新建一个MyService继承自Service,并重写父类的onCreate()、onStartCommand()和onDestroy()方法,如下所示:

    public class MyService extends Service {  
      
        public static final String TAG = "MyService";  
      
        @Override  
        public void onCreate() {  
            super.onCreate();  
            Log.d(TAG, "onCreate() executed");  
        }  
      
        @Override  
        public int onStartCommand(Intent intent, int flags, int startId) {  
            Log.d(TAG, "onStartCommand() executed");  
            return super.onStartCommand(intent, flags, startId);  
        }  
          
        @Override  
        public void onDestroy() {  
            super.onDestroy();  
            Log.d(TAG, "onDestroy() executed");  
        }  
      
        @Override  
        public IBinder onBind(Intent intent) {  
            return null;  
        }  
      
    }  
    

    2、在AndroidManifest.xml中注册

     <application  ......>  
              ……  
            <service android:name="com.example.servicetest.MyService" >  
            </service>  
      </application>  
    

    3、开启、关闭一个服务

    //开启
    Intent startIntent = new Intent(this, MyService.class);  
                startService(startIntent);  
    //关闭
    Intent stopIntent = new Intent(this, MyService.class);  
                stopService(stopIntent);  
    

    由于onCreate()方法只会在Service第一次被创建的时候调用,如果当前Service已经被创建过了,不管怎样调用startService()方法,onCreate()方法都不会再执行,只会有onStartCommand()方法中的打印日志。

    二、Service和Activity通信,绑定启动

    1、有一个onBind()方法一直都没有使用到,这个方法其实就是用于和Activity建立关联的。修改MyService中的代码,如下所示:

    public class MyService extends Service {  
      
        public static final String TAG = "MyService";  
      
        private MyBinder mBinder = new MyBinder();  
      
        /**
         * 首次创建服务时,系统将调用此方法来执行一次性设置程序(在调用 
         * onStartCommand() 或 onBind() 之前)。
         * 如果服务已在运行,则不会调用此方法。该方法只被调用一次
         */
        @Override  
        public void onCreate() {  
            super.onCreate();  
            Log.d(TAG, "onCreate() executed");  
        }  
      
    
        /**
         * 每次通过startService()方法启动Service时都会被回调。
         * @param intent
         * @param flags
         * @param startId
         * @return
         */
        @Override  
        public int onStartCommand(Intent intent, int flags, int startId) {  
            Log.d(TAG, "onStartCommand() executed");  
            return super.onStartCommand(intent, flags, startId);  
        }  
      
        /**
         * 服务销毁时的回调
         */
        @Override  
        public void onDestroy() {  
            super.onDestroy();  
            Log.d(TAG, "onDestroy() executed");  
        }  
      
        /**
         * 绑定服务时才会调用
         * 必须要实现的方法  
         * @param intent
         * @return
         */
        @Override  
        public IBinder onBind(Intent intent) {  
            return mBinder;  
        }  
      
      /**
         * 内部binder类
         */
        class MyBinder extends Binder {  
      
            public void startDownload() {  
                Log.d("TAG", "startDownload() executed");  
                // 执行具体的下载任务  
            }  
      
        }  
      
    }  
    

    2、在Activity中创建ServiceConnection;

    private MyService.MyBinder myBinder;  
        /**
         * ServiceConnection代表与服务的连接,它只有两个方法,
         * onServiceConnected和onServiceDisconnected,
         * 前者是在操作者在连接一个服务成功时被调用,而后者是在服务崩溃或被杀死导致的连接中断时被调用
         */
        private ServiceConnection connection = new ServiceConnection() {  
      
                /**
                 * 当取消绑定的时候被回调。但正常情况下是不被调用的,它的调
                 * 用时机是当Service服务被意外销毁时,
                 * 例如内存的资源不足时这个方法才被自动调用。
                 */
            @Override  
            public void onServiceDisconnected(ComponentName name) {  
            }  
      
                /**
                 * 与服务器端交互的接口方法 绑定服务的时候被回调,在这个方
                 * 法获取绑定Service传递过来的IBinder对象,
                 * 通过这个IBinder对象,实现宿主和Service的交互。
                 */
            @Override  
            public void onServiceConnected(ComponentName name, IBinder service) {  
                myBinder = (MyService.MyBinder) service;  
                myBinder.startDownload();  
            }  
        };  
    

    3、绑定、解绑服务

    //绑定
    Intent bindIntent = new Intent(this, MyService.class);  
                bindService(bindIntent, connection, BIND_AUTO_CREATE);  
    //解绑
     unbindService(connection);
    

    感谢:
    Android Service完全解析,关于服务你所需知道的一切
    关于Android Service真正的完全详解,你需要知道的一切

    相关文章

      网友评论

          本文标题:Android Service服务的基本用法

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