當前位置:首頁 » 安卓系統 » 線程進程android

線程進程android

發布時間: 2022-05-08 13:57:00

❶ Android中進程與線程及如何在子線程中操作U

一個Android 程序默認情況只有一個進程,但是一個進程可以有多個線程。其中有一個UI 線程也稱為UI主線程,UI Thread在Android程序運行的時候就被創建,主要是負責控制UI界面的顯示、更新和控制項交互。所有的Android應用程序組件----包括Activity、Service、Broadcast Receiver都在應用程序的主線程中運行。因此,任何組件中的費時操作處理都可能阻塞所有其他的組件、包括Service和可見的Activity。
在Android 中,對未響應的定義是:Activity對一個輸入事件在5s內沒有響應,或者Broadcast Receiver在10s內沒有完成他的onReceive處理程序。對於任何不用直接和用戶界面進行交互的重要處理,使用後台線程技術處理是非常重要的,將文件操作、網路交互、資料庫、復雜計算調度到後台線程中完成非常重要,以免阻塞主線程。
方法一:Thread+Handler
開啟一個新線程:new Thread(new MyThread()).start();

//通過Handler物件,通知主線程UI Thread來更新界面
Handler myHandler=new Handler(){
//此方法主要用於更新UI
public void handleMessage(Message msg){
switch(msg.what){
//根據Thread返回的標識進行相應的處理
}
}
};

class MyThread implements Runnable{
public void run(){
int what=0;
//將耗時操作放到這里處理

//to-do

❷ Android進程和線程的區別

Android進程和線程的區別

下面我先介紹下Android進程和線程各是什麼,然後再一一比較區別下

  1. Android進程基本知識:

    當一個程序第一次啟動的時候,Android會啟動一個LINUX進程和一個主線程。默認的情況下,所有該程序的組件都將在該進程和線程中運行。 同時,Android會為每個應用程序分配一個單獨的LINUX用戶。Android會盡量保留一個正在運行進程,只在內存資源出現不足時,Android會嘗試停止一些進程從而釋放足夠的資源給其他新的進程使用, 也能保證用戶正在訪問的當前進程有足夠的資源去及時地響應用戶的事件。

    我們可以將一些組件運行在其他進程中,並且可以為任意的進程添加線程。組件運行在哪個進程中是在manifest文件里設置的,其中<Activity>,<Service>,<receiver>和<provider>都有一個process屬性來指定該組件運行在哪個進程之中。我們可以設置這個屬性,使得每個組件運行在它們自己的進程中,或是幾個組件共同享用一個進程,或是不共同享用。<application>元素也有一個process屬性,用來指定所有的組件的默認屬性。


    Android中的所有組件都在指定的進程中的主線程中實例化的,對組件的系統調用也是由主線程發出的。每個實例不會建立新的線程。對系統調用進行響應的方法——例如負責執行用戶動作的View.onKeyDown()和組件的生命周期函數——都是運行在這個主線程中的。這意味著當系統調用這個組件時,這個組件不能長時間的阻塞主線程。例如進行網路操作時或是更新UI時,如果運行時間較長,就不能直接在主線程中運行,因為這樣會阻塞這個進程中其他的組件,我們可以將這樣的組件分配到新建的線程中或是其他的線程中運行。

    Android會根據進程中運行的組件類別以及組件的狀態來判斷該進程的重要性,Android會首先停止那些不重要的進程。按照重要性從高到低一共有五個級別:


    1.1前台進程

    前台進程是用戶當前正在使用的進程。只有一些前台進程可以在任何時候都存在。他們是最後一個被結束的,當內存低到根本連他們都不能運行的時候。一般來說, 在這種情況下,設備會進行內存調度,中止一些前台進程來保持對用戶交互的響應。

    1.2可見進程

    可見進程不包含前台的組件但是會在屏幕上顯示一個可見的進程是的重要程度很高,除非前台進程需要獲取它的資源,不然不會被中止。

    1.3服務進程

    運行著一個通過startService() 方法啟動的service,這個service不屬於上面提到的2種更高重要性的。service所在的進程雖然對用戶不是直接可見的,但是他們執行了用戶非常關注的任務(比如播放mp3,從網路下載數據)。只要前台進程和可見進程有足夠的內存,系統不會回收他們。


    1.4後台進程

    運行著一個對用戶不可見的activity(調用過 onStop() 方法).這些進程對用戶體驗沒有直接的影響,可以在服務進程、可見進程、前台進 程需要內存的時候回收。通常,系統中會有很多不可見進程在運行,他們被保存在LRU (least recently used) 列表中,以便內存不足的時候被第一時間回收。如果一個activity正 確的執行了它的生命周期,關閉這個進程對於用戶體驗沒有太大的影響。


    1.5空進程

    未運行任何程序組件。運行這些進程的唯一原因是作為一個緩存,縮短下次程序需要重新使用的啟動時間。系統經常中止這些進程,這樣可以調節程序緩存和系統緩存的平衡。


  2. 單線程模型

    線程在代碼是使用標準的java Thread對象來建立,那麼在Android系統中提供了一系列方便的類來管理線程——Looper用來在一個線程中執行消息循環,Handler用來處理消息,HandlerThread創建帶有消息循環的線程。具體可以看下面的詳細介紹。

    當一個程序第一次啟動時,Android會同時啟動一個對應的主線程(Main Thread),主線程主要負責處理與UI相關的事件,如用戶的按鍵事件,用戶接觸屏幕的事件以及屏幕繪圖事件,並把相關的事件分發到對應的組件進行處理。所以主線程通常又被叫做UI線程。

    在開發Android應用時必須遵守單線程模型的原則: Android UI操作並不是線程安全的並且這些操作必須在UI線程中執行。


2.1 子線程更新UI Android的UI是單線程(Single-threaded)的。

為了避免拖住GUI,一些較費時的對象應該交給獨立的線程去執行。如果幕後的線程來執行UI對象,Android就會發出錯誤訊息 。以後遇到這樣的異常拋出時就要知道怎麼回事了!

2.2 Message Queue

在單線程模型下,為了解決類似的問題,Android設計了一個Message Queue(消息隊列), 線程間可以通過該Message Queue並結合Handler和Looper組件進行信息交換。下面將對它們進行分別介紹:


2..3 Message 消息

理解為線程間交流的信息,處理數據後台線程需要更新UI,則發送Message內含一些數據給UI線程。

2.4. Handler 處理者

是Message的主要處理者,負責Message的發送,Message內容的執行處理。後台線程就是通過傳進來的Handler對象引用來sendMessage(Message)。而使用Handler,需要implement 該類的 handleMessage(Message) 方法,它是處理這些Message的操作內容,例如Update UI。通常需要子類化Handler來實現handleMessage方法。


2.5. Message Queue 消息隊列

用來存放通過Handler發布的消息,按照先進先出執行。 每個message queue都會有一個對應的Handler。Handler會向message queue通過兩種方法發送消息:sendMessage或post。這兩種消息都會插在message queue隊尾並按先進先出執行。但通過這兩種方法發送的消息執行的方式略有不同:通過sendMessage發送的是一個message對象,會被Handler的handleMessage()函數處理;而通過post方法發送的是一個runnable對象,則會自己執行。

2.6 Looper Looper是每條線程里的Message Queue的管家。

Android沒有Global的Message Queue,而Android會自動替主線程(UI線程)建立Message Queue,但在子線程里並沒有建立Message Queue。所以調用Looper.getMainLooper()得到的主線程的Looper不為NULL,但調用Looper.myLooper()得到當前線程的Looper就有可能為NULL。


從以上幾點,不難看出Android進程和線程的二者的區別所在。

❸ android服務和進程的區別

他們之間的區別:Service很大程度上充當了應用程序後台線程管理器的角色。(如果Activity中新開啟一個線程,當該Acitivyt關閉後,該線程依然在工作,但是與開啟它的Activity失去聯系。也就是說此時的這個線程處於失去管理的狀態。但是使用Service,則可以對後台運行的線程有效地管理。)
一個服務不是一個單獨的進程。服務對象本身並不意味著它是在自己的進程中運行,除非另有規定,否則它與運行程序是同在一個進程中。
一個服務不是一個單獨的線程。Service和其他組件一樣,默認情況下,Service中的所有代碼都是運行在主線程中。
在android中,為什麼不使用後台線程而使用Service? 有3大要點:
1、Service可以放在獨立的進程中,所以更安全;

2、使用Service可以依賴現有的binder機制,不需要在應用層面上處理線程同步的繁雜工作;

3、系統可以重新啟動異常死去的Service。

說明:進程是由若干線程組成。(線程是進程中的一部分,進程包含多個線程在運行。)

❹ android中線程,進程都是什麼意思(通俗易懂的)

android中的進程就是一個個獨立的APP應用。線程可以理解為進程中的時間片斷:從代碼執行的角度來看,主線程就是APP從開始一句一句代碼從上往下執行,而子線程的執行時間片斷與主線程的執行時間片斷是分開的,執行時間不會影響到主線程的執行時間。

❺ Android進程與線程區別

所以下來特地去查了以下資料,先說說線程:
(1)在Android APP中,只允許有一個主線程,進行UI的渲染等等,但是不能進行耗時操作(網路交互等等),否則會造成ANR,就是線程阻塞卡死,未響應。
(2)除了主線程之外,耗時操作都應該規范到子線程中,線程之間會有相應的通信方式,但相互獨立。
(3)然後看了一下所查資料:
線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。線程比進程更小,基本上不擁有系統資源,故對它的調度所用資源小,能更高效的提高系統內多個程序間並發執行的。 嗯,從大的說就是這樣。
在平時的Android開發過程中,基本上都會用到線程handler,thread等等,具體的實現方法我就不在這里寫了。

進程:
根據所查資料:是一個具有獨立功能的程序關於某個數據集合的一次運行活動。進程是系統進行資源分配和調度的一個獨立單位。可以申請和擁有系統資源,是一個動態的概念,是一個活動的實體,是一個「執行中的程序」。不只是程序的代碼,還包括當前的活動。
這應該是一個比較大的概念,存在於一個系統中,與線程的區別是:

1、子進程和父進程有不同的代碼和數據空間,而多個線程則共享數據空間,每個線程有自己的執行堆棧和程序計數器為其執行上下文。
2、進程間相互獨立,同一進程的各線程間共享。某進程內的線程在其它進程不可見。

3、進程間通信IPC,線程間可以直接讀寫進程數據段(如全局變數)來進行通信——需要進程同步和互斥手段的輔助,以保證數據的一致性。

4、線程上下文切換比進程上下文切換要快得多。

❻ android 線程和進程的區別 舉例說明

進程可以有多個線程,我就知道這個哈哈哈哈

❼ android進程和線程到底有什麼區別

  1. 進程:是一個具有獨立功能的程序關於某個數據集合的一次運行活動。進程是系統進行資源分配和調度的一個獨立單位。可以申請和擁有系統資源,是一個動態的概念,是一個活動的實體,是一個「執行中的程序」。不只是程序的代碼,還包括當前的活動。

  2. 線程:線程是進程的一個實體,是CPU調度和分
    派的基本單位,它是比進程更小的能獨立運行的基本單位。線程比進程更小,基本上不擁有系統資源,故對它的調度所用資源小,能更高效的提高系統內多個程序間並發執行的
    程度。

  3. 線程和進程的區別:

1、子進程和父進程有不同的代碼和數據空間,而多個線程則共享數據空間,每個線程有自己的執行堆棧和程序計數器為其執行上下文。

2、進程間相互獨立,同一進程的各線程間共享。某進程內的線程在其它進程不可見。

3、進程間通信IPC,線程間可以直接讀寫進程數據段(如全局變數)來進行通信——需要進程同步和互斥手段的輔助,以保證數據的一致性。

4、線程上下文切換比進程上下文切換要快得多。

❽ 請問android系統中的進程,任務,服務三者的區別和聯系

進程是總稱,包括第三方應用和系統應用以及系統底層模塊。任務是你安裝的第三方應用進程。而服務是系統模塊進程。

❾ Android中線程與線程,進程與進程之間如何通信

使用handler發送message,消息隊列排隊

進程是一個具有獨立功能的程序關於某個數據集合的一次運行活動。它可以申請和擁有系統資源,是一個動態的概念,是一個活動的實體。它不只是程序的代碼,還包括當前的活動,通過程序計數器的值和處理寄存器的內容來表示。
進程是一個「執行中的程序」。程序是一個沒有生命的實體,只有處理器賦予程序生命時,它才能成為一個活動的實體,我們稱其為進程。
通常在一個進程中可以包含若干個線程,它們可以利用進程所擁有的資源。在引入線程的操作系統中,通常都是把進程作為分配資源的基本單位,而把線程作為獨立運行和獨立調度的基本單位。由於線程比進程更小,基本上不擁有系統資源,故對它的調度所付出的開銷就會小得多,能更高效的提高系統內多個程序間並發執行的程度。
線程和進程的區別在於,子進程和父進程有不同的代碼和數據空間,而多個線程則共享數據空間,每個線程有自己的執行堆棧和程序計數器為其執行上下文。多線程主要是為了節約CPU時間,發揮利用,根據具體情況而定。線程的運行中需要使用計算機的內存資源和CPU。

熱點內容
python位元組轉字元串 發布:2025-05-14 07:06:35 瀏覽:420
subplotpython 發布:2025-05-14 06:53:51 瀏覽:661
豎屏大屏導航工廠密碼一般是多少 發布:2025-05-14 06:49:29 瀏覽:806
如何在手機里設置無線網密碼 發布:2025-05-14 06:47:54 瀏覽:120
動態ip文件伺服器 發布:2025-05-14 06:44:22 瀏覽:891
文字分行的腳本有什麼 發布:2025-05-14 06:33:10 瀏覽:288
svn小烏龜怎麼配置 發布:2025-05-14 06:31:43 瀏覽:393
視頻播放器android 發布:2025-05-14 06:31:43 瀏覽:720
android工作室 發布:2025-05-14 06:26:00 瀏覽:658
汽車官方配置表如何下載 發布:2025-05-14 06:21:41 瀏覽:800