菜鳥面試第一天之Android四大組件

先談談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生命週期視圖:


Service使用需要注意的問題:

1,ServiceConnection的回調方法onServiceDisconnected()在連接正常關閉的情況下是不會被調用的,該

方法只在Service被破壞了或者被殺死的時候調用。例如,系統資源不足,要關閉一些Service,剛好連接綁定

的Service是關閉者之一,這個時候onServiceDisconected()就會被調用。

2,如果Service和調用者不是在同一個進程,則不可以在ServiceConnection的回調方法onServiceConnected中

將Service強制類型轉換,在Debug中可以發現onServiceConnected的Service的類型爲BinderProxy.





















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章