99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋果6袋
6
麥子學(xué)院

ANDROID下的四大組件之服務(wù)SERVICE

發(fā)布時間:2016-09-05 21:04  回復(fù):0  查看:2201   最后回復(fù):2016-09-05 21:04  

這篇文章主要講解一些Android service入門基礎(chǔ)知識,希望帶大家走進(jìn)Android service的大門。

 

1.什么是服務(wù)

服務(wù)是Android中為了實現(xiàn)程序后臺運行的解決方案,非常適合執(zhí)行那些不需要和用戶交互而且還要求長期運行的程序。服務(wù)的運行不依賴任何用戶界面,即使程序被切換到后臺,或者用戶打開了另一個應(yīng)用程序,服務(wù)仍然能夠保持正常運行。

 

2.如何定義服務(wù)

通常我們會新建一個類,讓其繼承Service

:

 

public class MyService extends Service{

        public IBinder onBind(Intent intent){

    

        }

 

        public void onCreate(){

 

        }

 

         public int onStartCommand(Intent intnt,int flags,int startId){

             return super.onStartCommand(intente,flags,startId)

         }

 

         public void onDestory(){

            super.onDestory();

         }

}                            

 

onCreate()在服務(wù)創(chuàng)建的時候啟動,onStratCommand()會在服務(wù)啟動的時候啟動,onDestory()會在服務(wù)銷毀的時候調(diào)用。

 

3.如何啟動服務(wù)

首先要在AndroidManifest中注冊service,如:

<service  name="MyService">

</service>

啟動服務(wù)需要通過方法startService(Intent),startService(new Intent(this,MyService.class));

停止服務(wù)則需要通過方法stopService(Intnet),stopService(new Intent(this,MyService.class));

 

啟動服務(wù)后會先調(diào)用onCreate(),然后再調(diào)用onStartCommand()。其中onCreate()在第一次創(chuàng)建service的時候會調(diào)用,onStartCommand()每次啟動服務(wù)的時候都會調(diào)用。

 

4.服務(wù)如何和活動進(jìn)行通信

雖然我們通過startService啟動了服務(wù),但是這也只是單單的運行服務(wù),沒有和活動進(jìn)行任何聯(lián)系,所以現(xiàn)在我們要讓服務(wù)和活動進(jìn)行通信。

這里讓兩者聯(lián)系起來需要用到之前提到過的onBind(),但是我們首先要在繼承了Service的類中,創(chuàng)建一個繼承了Binder的內(nèi)部類,該內(nèi)部類中寫上需要活動用到的方法,如查看下載進(jìn)度的getProgress()和開始下載的startDownload(),為了讓活動能獲取到該類的實例,我們還需要創(chuàng)建一個實例,onBind()中返回該實例。整體的例子:

 

public class LocalService extends Service {

 

   

    public class DownloadBinder extends Binder{

        public void startDownload(){

             Log.d("MyService","startDownload execute");

        }

         

        public int getProgress(){

            return 0;

        }

    }

     

    public DownloadBinder mBinder=new DownloadBinder();

     

     

    @Override

    public IBinder onBind(Intent intent) {

        // 返回 SimpleBinder 對象

        return mBinder;

    }

 

}

 

 

那么接下來活動如何獲取Binder呢?

我們只要在活動中調(diào)用onBind(Intnet,serviceConnection,BIND_AUTO_CREATE)就可以讓服務(wù)和活動綁定在一起,從而讓活動調(diào)用服務(wù)中的方法。

這其中第二個參數(shù)serviceConnection需要我們在活動中創(chuàng)建出來,我們需要在活動中創(chuàng)建其匿名類,然后其中有兩個方法,一個為onServiceConnected(),另一個為onServiceDisconnected(),

我們需要在onServiceConnected()中通過向下轉(zhuǎn)型獲取到服務(wù)中的Binder,然后通過Binder調(diào)用服務(wù)中的方法。

第三個參數(shù)是一個標(biāo)志位,BIND_AUTO_CREATE代表活動和服務(wù)在綁定后自動創(chuàng)建服務(wù)。

如果需要解綁服務(wù),調(diào)用unbindService(serviceConnection);

 

例子

 

ServiceConnection sc = new ServiceConnection() {

             

            @Override

            public void onServiceDisconnected(ComponentName name)          {

 

            }

             

            @Override

            public void onServiceConnected(ComponentName name, IBinder service) {

                MyService.DownloadBinder mBinder = (MyService.DownloadBinder)service;

               

            }

        };

        findViewById(R.id.btnBind).setOnClickListener(new OnClickListener() {

             

            @Override

            public void onClick(View v) {

                bindService(new Intent(Main.this,MyService.class), sc, Context.BIND_AUTO_CREATE);

                isBind = true;

            }

        });

        findViewById(R.id.btnUnbind).setOnClickListener(new OnClickListener() {

             

            @Override

            public void onClick(View v) {

                if(isBind){

                    unbindService(sc);

                    isBind = false;

                }

            }

        });

 

 

5.服務(wù)的生命周期

只啟動的服務(wù):onCreate()→onStartCommand()→onDestory()

如果被startService()多次啟動,onCreate()只執(zhí)行一次,onStart()多次執(zhí)行,只創(chuàng)建Service的一個實例。

 

只綁定的服務(wù):onCreate()→onBind→onUnbind()→onDestory()

bindService()多次調(diào)用,onCreate()只調(diào)用一次,除非調(diào)用unBindService(),否則Service一直運行。

 

即啟動又綁定的服務(wù):onCreate()→onStartCommand()→onBind()→onUnBind()→onDestory()

onCreate()必定只執(zhí)行一次,startService調(diào)用幾次則執(zhí)行幾次onStartCommand(),調(diào)用unbind不會停止service,必須stopServiceServicestopself()停止服務(wù)。

 

 

 

文章來自:博客園/shawdo

您還未登錄,請先登錄

熱門帖子

最新帖子

?