關於android編程中service和activity的區別


一、

絕大部分情況下,Service的作用是用來“執行”后台的、耗時的、重要的任務,三者缺一不可,而最重要的原因是第三點:要執行重要的任務。

因為當一個進程啟動了Service后,進程的優先級變高了,系統除非在非常極端的情況下,不會殺掉該進程,反觀Activity,不具備這樣的特性。

如果沒有滿足上面所說的三點,請謹慎使用Service,千萬別把使用Service的理由變成:這樣可以常駐后台。從資源使用的角度來看,這是非常不可取的。

 

二、

1.Activity和Service的生命周期不一樣,Activity處在哪個生命周期是由系統控制的,service是由程序控制的,service不能自己啟動,而且service不與用戶交互。

2.A Service is an application component that can perform long-running operations in the background and does not provide a user interface.

最重要的區別還是service能后台運行,activity不能。

3.service就是沒界面關聯的純邏輯Activity,然后,service能夠有兩種狀態,1.程序退出后在后台運行本服務,2.程序運行時在后台執行某些操作。

4.除了樓上所說的,service的另外一種重要的用途是實現跨進程調用,其中Binder的概念比較重要,AIDL也與Binder有關,而Acitity並不處理跨進程調用的工作。

5.Service后台運行,類似服務,和Activety是一個級別類似,但是自己無法運行,需要Activity或者其他對象調用。

 

三、

從設計的角度來講:
Android的Activity的設計與Web頁面非常類似,從頁面的跳轉通過連接,以及從頁面的定位通過URL,從每個頁面的獨立封裝等方面都可以看出來,它主要負責與用戶進行交互。

Service則是在后台運行,默默地為用戶提供功能,進行調度和統籌,如果一棵樹的地上部分是Activity的話,它龐大的根須就是Service。Android的服務組件沒有運行在獨立的進程或線程中,它和其他的組件一樣也在應用的主線程中運行,如果服務組件執行比較耗時的操作就會導致主線程阻塞或者假死,從而無法響應用戶的操作。

從使用的角度來講:
Service不僅可以給Activity建立雙向連接,為Activity提供數據和功能支持,也可以單向接受Intent的請求,進行數據的分析處理和功能調度。

從扮演的角色來講:
Activity的功能比較單一,主要就是顯示應用所具有的一些功能,幫助用戶與應用進行交互,像一個人的臉。而Service可能扮演功能調度者也能扮演功能提供者,從觸發器收集信息進行分析和處理,然后更新界面,修改數據或進行其他操作時是一個功能調度者,從輸入法的選擇考慮Service扮演的就是一個功能提供者。View組件是Android中用戶能夠實實在在看到的部分,如按鈕,輸入框等就是繼承自這個類,View只有裝入Activity這樣的容器中才有意義,而反過來
Activity裝入了這些View后才能夠成功完成與用戶交互的任務,但是Service不需要這些花哨的東西,只需要默默地等待事件發生或者聽候差遣。

 

四、

1.Activity是Android應用的核心概念,簡而言之Activity為用戶交互管理者,有一個可視界面呈現,而Service跟Activity的區別是他在后台運行,沒有界面呈現。

2。service和activity在使用intent上的細小區別,就是intent的傳值上有區別

(1)

//進行activity與service之間的跳轉
//一個activity 叫做 Mp3listActivity
//一個service 叫做 Mp3downloadService
//代碼片段
Intent intent = new Intent();
intent.putExtra("mp3info",mp3info);
intent.setClass(this,Mp3downloadService.class);
startService(intent);
//--------------------------
//你看到了跳轉到一個service
//--------------------------
//在service中
//startCommand(Inent intent,int flags, int startId)
//取值代碼
Mp3Info mp3info = (Mp3Info)intent.getSerializableExtra("mp3info");
//-----------------------------------------------------------------

 


(2)

 //進行activity與activity之間的跳轉
//一個activity 叫做 Mp3listActivity
//一個activity 叫做 Mp3PlayActivity
//關鍵代碼片段
Intent intent = new Intent();
intent.putExtra("mp3info", mp3info);
intent.setClass(this,Mp3PlayActivity.class);
startActivity(intent);
//-----------------------------
//你看到了跳轉到Mp3PlayActivity
//-----------------------------
//onCreate()方法中的取值代碼 intent = getIntent();
Mp3Info mp3info = (Mp3Info)intent.getSerializableExtra("mp3info");
//------------------------------------------------
//自己嘗試了解,能自己得出Service和activity在intent傳值的細小區別

 

關閉Activity后怎么讓service繼續運行?

1.如果你的service沒有binder Activity話,activity關閉service也在后台運行
 
        
2.你是怎么啟service ,如果是startService ,關閉了 調用service的線程,service是不會被關閉的,如果是bindService,Service就和調用bindService的進程同生共死了,也就是說當調用bindService的進程死了,那么它bind的Service也要跟着被結束

http://blog.csdn.net/foreverhuylee/article/details/20372055原文鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM