真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Android之service探究-創(chuàng)新互聯(lián)

首先,我們來看看service的英文翻譯:   服務(名詞) 、服務性的(形容詞)。在android中service是如何解釋的呢,下面是google的原文翻譯:A Service is an application component that can perform long-running operations in the background and does not provide a user interface. Another application component can start a service and it will continue to run in the background even if the user switches to another application. Additionally, a component can bind to a service to interact with it and even perform interprocess communication (IPC).

成都創(chuàng)新互聯(lián)是一家專業(yè)提供青岡企業(yè)網(wǎng)站建設,專注與成都做網(wǎng)站、成都網(wǎng)站建設、H5技術、小程序制作等業(yè)務。10年已為青岡眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡公司優(yōu)惠進行中。

    從上面的說明就可以知道service是什么了、是做什么的、可以做什么,其主要特點有一下幾個方面:

(1):Service 是一個APP的component 。

(2):service 運行在后臺的(in the background)、并且沒有用戶接口的。

(3):一個app的service 可以在該app退出時,仍然在后臺正常運行。

(4):還有就是,一個service也可以和一個組件(activity)綁定,并可以進行進程間通信。

通過google的描述,我們基本上說明白Service?,F(xiàn)在我們來看,Service到底是一個什么東西:

 首先,我們來看Service.java里面Service的定義:

public abstract class Service extends ContextWrapper implements ComponentCallbacks2 {
...

}
   看到這里,估計你會恍然大悟,原來也是一個Context子類。我們知道,Activity一樣也是一個Context子類。
     所以,其實從某種意義上來講Service和Activity本質(zhì)是一樣的。相對于Service來說,Activity只是還封裝了一些與界面顯示相關的方法和數(shù)據(jù)、以及實現(xiàn)了用戶與app交流的一些像是按鍵事件處理、窗口信息等這樣一類方法。因為,一個service根本沒有可供前臺顯示、與用戶交流的能力,所以可以理解我service是運行在后來的(Runing in the background)。
     所以,對于Service來說,一個Activity用于處理需要能夠與用戶直接交流的工作。相對于Activity來說,一個Service主要用于處理不需要與用戶直接交流的工作,比如播放音樂(當我們推出音樂播放器的時候,音樂仍然還在播放,這里播放這個音樂就是用一個service來做的)。
    如何啟動一個Service呢?Context中有啟動、停止Service的方法,所以Activity和Service都是可以啟動和停止一個Service。我們來看看Context中有啟動、停止Service的方法(其具體的方法實現(xiàn),在ContextImpl.java里):
public abstract ComponentName startService(Intent service);
        public abstract boolean stopService(Intent service);
public abstract boolean bindService(Intent service, ServiceConnection conn,int flags);
        public boolean bindService(Intent service, ServiceConnection conn, int flags, int userHandle) {
          throw new RuntimeException("Not implemented. Must override in a subclass.");
         }
public abstract void unbindService(ServiceConnection conn);
由此可見,啟動一個Service其實有兩種:Start和Bind。有什么區(qū)別呢?
     我們還是來看看google如何解釋stopService的:
Using startService() overrides the default service lifetime that is managed by {@link #bindService}: it requires the service to remain running until {@link #stopService} is called, regardless of whether any clients are connected to it. 
       下面看看google如何解釋bindService的:
This defines a dependency between your application and the service. 
The service will be considered required by the system only for as long as the calling context exists. 
        (1):從上面的解釋可以知道,用startService()來啟動一個Service, 該啟動的service不依賴于這個啟動他的app(Activity或者Service),幾乎可以說和啟動這個Service的Component沒有其他關聯(lián),一般情況下,除非調(diào)用stopService()來停止這個Service,否則這個Service是不會因為其他原因被迫Stop的,當然這里說的也只是一般情況,往往還有一些特殊情況,如下google的解釋:
The only time they should be stopped is if the current foreground application is using so many resources that the service needs to be killed. 
很顯然這是一種特殊情況。只要我們知道,一般情況下系統(tǒng)會盡量讓Startservice啟動的Service保持運行狀態(tài)的,除非stopService()方式來停止這個Service。
         (2):相比startService()來啟動一個Service, BindService()啟動一個Service就不一樣了,從上面的google的意思可以知道:BindService()方式啟動的Service和啟動他的app是相互依賴的,其實更多的是這個Service依賴于這個APP。實際上android系統(tǒng)是這樣覺得的:對于啟動這個Service的Component(Activity/Service),如果這個Component(Activity/Service)都不存在了,那么這個被他啟動的Service也是沒有必要保留的。
         下面我們來看看Service的一個方法:public void onCreate()。這個方法在一個service實例化的時候才會調(diào)用,只要這個Service已經(jīng)實例化了,這個函數(shù)當然就不可能再調(diào)用了。startService()和BindService()于其不一樣,他們可以重復調(diào)用的。
         我們再來說一下Service這個函數(shù)public void onDestroy()。這個函數(shù)不是我們?nèi)フ{(diào)用的,主要是系統(tǒng)來要清除一個他認為無效的Service的時候調(diào)用的。
          接下來,要說最后一個問題:看到有人在網(wǎng)上問,既然Service是在后臺運行的,那和定義一個Thread來來做這些工作有是不是是一樣的呢? 回答當然是否定的,而且根本是風牛馬不相及,下面一點點來解釋:
         上面我們說了,其實一個Service和Activity一樣,都是一個context的子類,本質(zhì)上說其實是一樣的。我們知道,一個APP運行在自己的進程中,該進程的有一個所謂的主線程(UI線程),其Activity的所有的動作都是在這個主線程運行的,比如布局、ImageView等組件繪制、按鍵事件、以及啟動一個Activity等都是在這個主線程完成的。上面說了,Service和Activity本質(zhì)一樣的,所以其實一個Service所有的工作也都是在這個主線程完成的,他和Activity一樣,也是可以自己啟動一個獨立的線程來處理其他事情的,以免阻塞了主線程!所以Service和Thread根本不是一回事!

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


網(wǎng)站欄目:Android之service探究-創(chuàng)新互聯(lián)
當前路徑:http://weahome.cn/article/dogceo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部