1.線程與進程的區別:
進程是指運行中的應用程序,每一個進程都有自己獨立的內存空間。一個應用程序可以同時啟動多個進程。例如對於IE瀏覽器程序,每打開一個IE瀏覽器窗口,就啟動了一個新的進程。同樣,每次執行JDK的java.exe程序,就啟動了一個獨立的Java虛擬機進程,該進程的任務是解析並執行Java程序代碼。
線程是指進程中的一個執行流程,有時也稱為執行情景。一個進程可以由多個線程組成,即在一個進程中可以同時運行多個不同的線程,它們分別執行不同的任務。當進程內的多個線程同時運行時,這種運行方式稱為並發運行。許多服務器程序,如數據庫服務器和Web服務器,都支持並發運行,這些服務器能同時響應來自不同客戶的請求。
進程和線程的主要區別在於:每個進程都需要操作系統為其分配獨立的內存地址空間,而同一進程中的所有線程在同一塊地址空間中工作,這些線程可以共享同一塊內存和系統資源,比如共享一個對象或者共享已經打開的一個文件。
2.工作中遇到的安卓下線程與服務的區別:
1.進程和服務的定義
線程(thread):線程是程序運行的最小單元,是分配cpu的基本單位,本應用程序托管。
服務(service);是android的一種機制,對應的service是運行在主線程上的,它是由系統進程托管。他們之間的通信類似於client和server,是一種輕量級的ipc通信,這種通信的載體是binder,它是在linux層交換信息的一種ipc;
Thread的運行時獨立於Activity的,也就是說當一個Activity被finish之后,如果你沒有主動停止Thread或者Thread里的run方法沒有秩序完畢的話,Thread也會一直秩序。因此這了會出現一個問題:當Activity被finish之后,你不會再持有該Thread的引用。另一方面,你沒有辦法在不同的Activity中對同一Thread進行控制。如果你的Thread需要不停地隔一段時間就要連接服務器做同步的話,該Thread需要在Activity沒有start的時候也在運行。這個時候當你start一個Activity就沒有辦法在該Activity里面控制之前創建的Thread。
這是由於線程由本應用托管的結果。
1)在應用中,如果是長時間的在后台運行,而且不需要交互的情況下,使用服務。
3)最優的使用方法
創建並啟動一個service,在Service里面創建、運行並控制該Thread(因為任何Activity都可以控制同一個Service,而系統只會創建一個對應的Service的實例)還有個辦法是使用IntentService,它里面自帶了子線程,使用它就不用創建新線程了。
但由於是單個的worker thread,所以任務需要排隊,不適合大多數的多任務情況。
最后可以把Service想象成一種消息服務,而你可以在任何有Context的地方調用Context.startservice、Context.stopservice、Context.bindService,Context.unbindService,來控制它,也可以在Service里注冊BroadcastReceiver,在其他地方通過發broadcast來控制它。