菜鸟面试第一天之Android四大组件

时间:2021-08-07 17:50:21

先谈谈Android四大组件

           Service是Android系统中的四大组件之一,它是一种长生命周期的,没有可视化界面,运行于后台的一种服务程序。Service必须在AndroidManifest.xml中声明。Service有自己的声明周期,可以使用startService启动一个Service或使用bindServcie()方法绑定一个已经存在的Service。

                Service的生命周期没有Activity那么复杂,它只继承了onCreate,onStart(),onDestroy()三个方法,当第一次启动Service时,先后调用了onCreate(),onStart()这两个方法,当停止Service时,则执行onDestroy方法,这里需要注意的是,如果Service已经启动了,当我们再次启动Service时,不会再执行onCreate方法,而是直接执行onStart()方法。

          Service的启动方法

              Service的有两种启动方式:Context.startService()和Context.bindService(),这两种方式对Service生命周期的影响是不同的。

                1,Context.startService()方式启动

                       Context.startService()方式的生命周期

                       启动时:startService------------->onCreate()-------------------->onStart()

                       停止时:stopServcie-------------->onDestroy()

                如果调用者直接退出而没有停止Service,则Service会一直会在后台运行

                Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStarte()方法。

                      如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,但会导致多次调用onStart()方法。采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。

                                代码如下:

                             Intent  intent=new Intent();

                             Intent.setAction("com.my.action.My_SERVICE");

                           //启动服务       startService(intent);

                          //停止一个Service        stopService(intent);


                         2.Context.bindService()方式启动:

                            Context.bindService()方式的生命周期:

                            绑定时:bingService()---------->onCreate()------------------>onBind()

                            调用者退出了,即解绑定时:

                            Service就会unbindService()------------------->onUnbind()--------------------->onDestroy()

                     用Context.bindService()方法启动服务,在服务未被创建时,系统就会先调用服务的onCreate()方法,接着调用onBind()方法

。这个时候调用者和服务绑定在一起。

                     调用者退出了,系统就会调用服务的onUnbind()方法,接着调用onDestroy()方法。如果调用bindService()方法前服务已经被绑定,多次调用用bindService()

方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法不会被多次调用)。

                      如果调用希望与正在绑定的服务解除绑定,可以调用unbindService()方法,调用该方法也会导致系统调用服务的onUnbind()------>onDestroy()方法。

                    

绑定Service需要三个参数:bindService(intent,conn,Servcie.BIND_AUTO_CREATE)

                     第一个:Intent对象

                     第二个:ServiceConnection对象,创建该对象要实现它的onServiceConnected()和onServiceDisconnected()来监听Service连接和断开消息。

                     //连接对象

                     ServiceConnection  conn=new ServiceConnncetion(){

                             //连接调用

                            public void onServiceConnected(ComponentName  name,IBinder service){

                                  Log.i("Service",“连接成功”);

                            }

                           //断开时调用

                           public void onServiceDisconnectied(ComponentName  name){

                                      Log.i("Services","断开连接");

                           }

                     }


第三个:创建Service方法,一般指定绑定的时候自动创建

            理解Service生命周期视图:

菜鸟面试第一天之Android四大组件


Service使用需要注意的问题:

1,ServiceConnection的回调方法onServiceDisconnected()在连接正常关闭的情况下是不会被调用的,该

方法只在Service被破坏了或者被杀死的时候调用。例如,系统资源不足,要关闭一些Service,刚好连接绑定

的Service是关闭者之一,这个时候onServiceDisconected()就会被调用。

2,如果Service和调用者不是在同一个进程,则不可以在ServiceConnection的回调方法onServiceConnected中

将Service强制类型转换,在Debug中可以发现onServiceConnected的Service的类型为BinderProxy.