Android之Service相關

來源:互聯網
上載者:User

(一)Service介紹和注意事項

     Service,後台運行,可互動這樣的一個東西。它跟Activity的層級差不多,但是他不能自己運行,需要通過某一個Activity或者其他Context對象來調用,
Context.startService() 和
Context.bindService()。

   
兩種啟動Service的方式有所不同。這裡要說明一下的是如果你在Service的onCreate或者onStart做一些很耗時間的事情,最好在
Service裡啟動一個線程來完成,因為Service是跑在主線程中,會影響到你的UI操作或者阻塞主線程中的其他事情。

    
什麼時候需要Service呢?比如播放多媒體的時候使用者啟動了其他Activity這個時候程式要在後台繼續播放,比如檢測SD卡上檔案的變化,再或者在後台記錄你地理資訊位置的改變等等,總之服務嘛,總是藏在後頭的。

    Service在android當中是一個比較重要的構件,她只在後台工作,沒有Context。而且他也不是一個獨立的線程,而是和main用一個線程。在service中可以直接使用Toast進行一些資訊的提示。

    但要注意,如果直接在service中直接啟動另一個Activity則會出錯。原因是沒有設定flag,即在聲明Intent的時候要設定flag:intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)。下面給出一個例子:

public class backgroundServer extends Service{
...

public void startMyActivity(){
Intent i = new Intent();
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setClass(backgroundServer.this, myActivity.class);
startActivity(i);
}
...
}

這樣就可以啟動MyActivity了。(注意不要在AndroidManifest.xml中註冊該Activity)

(二)Service生命週期

Service的生命週期方法比Activity少一些,只有onCreate, onStart, onDestroy
我們有兩種方式啟動一個Service,他們對Service生命週期的影響是不一樣的。



1 通過startService

    Service會經曆 onCreate -> onStart
   stopService的時候直接onDestroy

   如果是調用者(TestServiceHolder)自己直接退出而沒有調用stopService的
   話,Service會一直在後台運行。
   下次TestServiceHolder再起來可以stopService。

  2 通過bindService   

    Service只會運行onCreate, 這個時候
TestServiceHolder
和TestService綁定在一起

   TestServiceHolder 退出了,Srevice就會調用onUnbind->onDestroyed
   所謂綁定在一起就共存亡了。

要是這幾個方法交織在一起的話,會出現什麼情況呢?
一個原則是Service的onCreate的方法只會被調用一次,就是你無論多少次的startService又
bindService,Service只被建立一次。如果先是bind了,那麼start的時候就直接運行Service的onStart方法,如果先
是start,那麼bind的時候就直接運行onBind方法。如果你先bind上了,就stop不掉了,對啊,就是stopService不好使了,只
能先UnbindService, 再StopService,所以是先start還是先bind行為是有區別的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.