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

android線程開啟

發布時間: 2025-02-23 13:09:13

Ⅰ Android應用最多開多少個線程,多開線程對程序有什麼影響

開線程無上限,就是開的越多,程序耗內存越大/邏輯越混亂,很容易掛掉。影響有下面幾點:
內存佔用多
線程同步問題復雜,需要考慮一個變數或方法/實例被多線程同時調用的問題
線程的控制,停止與終止會很麻煩

Ⅱ 如何在android系統休眠時開啟一個線程或者直接拉低某個GPIO狀態

就你現在的情況,最簡單的辦法是將你的AsyncTask.excute()方法的調用放到onCreateView()的最後,也就是說,當界面生成後,再開啟數據獲取線程,然後得到數據更新界面

Ⅲ 每個Android 都應必須了解的多線程知識點~

進程是系統調度和資源分配的一個獨立單位。

在Android中,一個應用程序就是一個獨立的集成,應用運行在一個獨立的環境中,可以避免其他應用程序/進程的干擾。當我們啟動一個應用程序時,系統就會創建一個進程(該進程是從Zygote中fork出來的,有獨立的ID),接著為這個進程創建一個主線程,然後就可以運行MainActivity了,應用程序的組件默認都是運行在其進程中。開發者可以通過設置應用的組件的運行進程,在清單文件中給組件設置:android:process = "進程名";可以達到讓組件運行在不同進程中的目的。讓組件運行在不同的進程中,既有好處,也有壞處。我們依次的說明下。

好處:每一個應用程序(也就是每一個進程)都會有一個內存預算,所有運行在這個進程中的程序使用的總內存不能超過這個值,讓組件運行不同的進程中,可以讓主進程可以擁有更多的空間資源。當我們的應用程序比較大,需要的內存資源比較多時(也就是用戶會抱怨應用經常出現OutOfMemory時),可以考慮使用多進程。

壞處:每個進程都會有自己的虛擬機實例,因此讓在進程間共享一些數據變得相對困難,需要採用進程間的通信來實現數據的共享。

線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。

在Android中,線程會有那麼幾種狀態:創建、就緒、運行、阻塞、結束。當應用程序有組件在運行時,UI線程是處於運行狀態的。默認情況下,應用的所有組件的操作都是在UI線程里完成的,包括響應用戶的操作(觸摸,點擊等),組件生命周期方法的調用,UI的更新等。因此如果UI線程處理阻塞狀態時(在線程里做一些耗時的操作,如網路連接等),就會不能響應各種操作,如果阻塞時間達到5秒,就會讓程序處於ANR(application not response)狀態。

1.線程作用

減少程序在並發執行時所付出的時空開銷,提高操作系統的並發性能。

2.線程分類

守護線程、非守護線程(用戶線程)

2.1 守護線程

定義:守護用戶線程的線程,即在程序運行時為其他線程提供一種通用服務
常見:如垃圾回收線程
設置方式:thread.setDaemon(true);//設置該線程為守護線程

2.2 非守護線程(用戶線程)

主線程 & 子線程。

2.2.1 主線程(UI線程)

定義:Android系統在程序啟動時會自動啟動一條主線程
作用:處理四大組件與用戶進行交互的事情(如UI、界面交互相關)
因為用戶隨時會與界面發生交互,因此主線程任何時候都必須保持很高的響應速度,所以主線程不允許進行耗時操作,否則會出現ANR。

2.2.2 子線程(工作線程)

定義:手動創建的線程
作用:耗時的操作(網路請求、I/O操作等)

2.3 守護線程與非守護線程的區別和聯系

區別:虛擬機是否已退出,即
a. 當所有用戶線程結束時,因為沒有守護的必要,所以守護線程也會終止,虛擬機也同樣退出
b. 反過來,只要任何用戶線程還在運行,守護線程就不會終止,虛擬機就不會退出

3.線程優先順序

3.1 表示

線程優先順序分為10個級別,分別用Thread類常量表示。

3.2 設置

通過方法setPriority(int grade)進行優先順序設置,默認線程優先順序是5,即 Thread.NORM_PRIORITY。

4.線程狀態

創建狀態:當用 new 操作符創建一個線程的時候

就緒狀態:調用 start 方法,處於就緒狀態的線程並不一定馬上就會執行 run 方法,還需要等待CPU的調度

運行狀態:CPU 開始調度線程,並開始執行 run 方法

阻塞(掛起)狀態:線程的執行過程中由於一些原因進入阻塞狀態,比如:調用 sleep/wait 方法、嘗試去得到一個鎖等

結束(消亡)狀態:run 方法執行完 或者 執行過程中遇到了一個異常

(1)start()和run()的區別

通過調用Thread類的start()方法來啟動一個線程,這時此線程是處於就緒狀態,並沒有運行。調用Thread類調用run()方法來完成其運行操作的,方法run()稱為線程體,它包含了要執行的這個線程的內容,run()運行結束,此線程終止,然後CPU再調度其它線程。

(2)sleep()、wait()、yield()的區別

sleep()方法屬於Thread類,wait()方法屬於Object類。
調用sleep()方法,線程不會釋放對象鎖,只是暫停執行指定的時間,會自動恢復運行狀態;調用wait()方法,線程會放棄對象鎖,進入等待此對象的等待鎖定池,不調用notify()方法,線程永遠處於就緒(掛起)狀態。

yield()直接由運行狀態跳回就緒狀態,表示退讓線程,讓出CPU,讓CPU調度器重新調度。禮讓可能成功,也可能不成功,也就是說,回到調度器和其他線程進行公平競爭。

1.Android線程的原則

(1)為什麼不能再主線程中做耗時操作
防止ANR, 不能在UI主線程中做耗時的操作,因此我們可以把耗時的操作放在另一個工作線程中去做。操作完成後,再通知UI主線程做出相應的響應。這就需要掌握線程間通信的方式了。 在Android中提供了兩種線程間的通信方式:一種是AsyncTask機制,另一種是Handler機制。

(2)為什麼不能在非UI線程中更新UI 因為Android的UI線程是非線程安全的,應用更新UI,是調用invalidate()方法來實現界面的重繪,而invalidate()方法是非線程安全的,也就是說當我們在非UI線程來更新UI時,可能會有其他的線程或UI線程也在更新UI,這就會導致界面更新的不同步。因此我們不能在非UI主線程中做更新UI的操作。

2.Android實現多線程的幾種方式

3.為何需要多線程

多線程的本質就是非同步處理,直觀一點說就是不要讓用戶感覺到「很卡」。

4.多線程機制的核心是啥

多線程核心機制是Handler

推薦Handler講解視頻: 面試總被問到Handler?帶你從源碼的角度解讀Handler核心機制

根據上方提到的 多進程、多線程、Handler 問題,我整理了一套 Binder與Handler 機制解析的學習文檔,提供給大家進行學習參考,有需要的可以 點擊這里直接獲取!!! 裡面記錄許多Android 相關學習知識點。

Ⅳ android在activity啟用線程,沒有出錯,調試過了,不執行run()方法,附上代碼。

我 直接給你上代碼了,你看看線程是怎麼用的,希望你自己學會他!
public void OnClick(){
MyThread t1=new MyThread();
t1,start();
}

class MyThread implements Runnable {
public void run() {
你的代碼

}
}

Ⅳ 請問一下android中的線程有時無法啟動是怎麼回事

例Activity開啟service開啟service處於新線程還與activity處於同線程呢

Ⅵ android onactivityresult 裡面可以開線程嗎

在一個主界面(主Activity)上能連接往許多不同子功能模塊(子Activity上去),當子模塊的事情做完之後就回到主界面,或許還同時返回一些子模塊完成的數據交給主Activity處理。這樣的數據交流就要用到回調函數onActivityResult。

<1>startActivityForResult(Intent intent,
int requestCode);

第一個參數:一個Intent對象

第二個參數:如果> = 0,當Activity結束時requestCode將歸還在onActivityResult()中。以便確定返回的數據是從哪個Activity中返回

<2>onActivityResult(int requestCode, int resultCode, Intent data)

第一個參數:這個整數requestCode提供給onActivityResult,是以便確認返回的數據是從哪個Activity返回的。

這個requestCode和startActivityForResult中的requestCode相對應。

第二個參數:這整數resultCode是由子Activity通過其setResult()方法返回。

第三個參數:一個Intent對象,帶有返回的數據。

<3>setResult(int resultCode, Intent data)

調用這個方法把Activity想要返回的數據返回到父Activity

第一個參數:當Activity結束時resultCode將歸還在onActivityResult()中,一般為RESULT_CANCELED , RESULT_OK。

第二個參數:一個Intent對象,返回給父Activity的數據。

熱點內容
c語言函數的功能 發布:2025-02-23 18:48:08 瀏覽:303
騰訊伺服器網站備用券碼怎麼申請 發布:2025-02-23 18:46:36 瀏覽:608
編譯後 發布:2025-02-23 18:45:50 瀏覽:486
安卓手機用什麼軟體測哪個電池 發布:2025-02-23 18:45:47 瀏覽:816
玩起氣泡解壓 發布:2025-02-23 18:42:49 瀏覽:17
訪問資料庫優化 發布:2025-02-23 18:42:37 瀏覽:762
安卓怎麼開啟網路連接 發布:2025-02-23 18:34:56 瀏覽:871
雲伺服器關機不收費 發布:2025-02-23 18:34:03 瀏覽:273
php訪問webservice 發布:2025-02-23 18:34:01 瀏覽:924
可以免費緩存的小說軟體 發布:2025-02-23 18:17:37 瀏覽:905