android開啟線程
A. Android中的線程和線程池
一、除了Thread外,扮演線程角色的還有:AsyncTask和IntentService,同時HandlerThread也扮演特殊的線程。
IntentService:內部採用HandlerThread來執行,像一個後台線程,同時是一個服務,不容易被系統殺死。
二、HandlerThread的run方法是一個無限循環
三、IntentService中任務是排隊執行的
四、AsyncTask
1、Android1.6之前串悄段桐行執行任務,1.6時候採用線程池裡的並行,Android3.0開始又開始串列(為了避免並發錯誤),單任可以並行。
2、AsyncTask必須在UI線程調用(不過這個不是絕對的,和版本有關燃腔系,API 16之前,API 16到 22, API 22以後) 參考一
原因:內部有靜態Handler,採用UI線程的Looper來處理消息,這就是為什麼AsyncTask必須在UI線程調用,因為子線程默認沒有Looper無法創建下面的Handler,程序會直接Crash
3、AsyncTask中有兩個線程池和一個Handler,一個線程池用啟坦於任務排隊,一個線程池用於真正的執行任務,InternalHandler用於將
執行環境從線程池切換到主線程
AsyncTask串列與並行
五、線程池
線程池中多餘的線程是如何回收的
B. 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. android在activity啟用線程,沒有出錯,調試過了,不執行run()方法,附上代碼。
我 直接給你上代碼了,你看看線程是怎麼用的,希望你自己學會他!
public void OnClick(){
MyThread t1=new MyThread();
t1,start();
}
class MyThread implements Runnable {
public void run() {
你的代碼
}
}
D. Android 如何創建子線程以及區分主線程
在一個Android 程序開始運行的時候,會單獨啟動一個Process。默認的情況下,所有這個程序中的Activity或者Service(Service和 Activity只是Android提供的Components中的兩種,除此之外還有Content Provider和Broadcast Receiver)都會跑在這個Process。
一個Android 程序默認情況下也只有一個Process,但一個Process下卻可以有許多個Thread。在這么多Thread當中,有一個Thread,我們稱之為UI Thread。UI Thread在Android程序運行的時候就被創建,是一個Process當中的主線程Main Thread,主要是負責控制UI界面的顯示、更新和控制項交互。在Android程序創建之初,一個Process呈現的是單線程模型,所有的任務都在一個線程中運行。因此,我們認為,UI Thread所執行的每一個函數,所花費的時間都應該是越短越好。而其他比較費時的工作(訪問網路,下載數據,查詢資料庫等),都應該交由子線程去執行,以免阻塞主線程。
那麼,UI Thread如何和其他Thread一起工作呢?常用方法是:
誕生一個主線程的Handler物件,當做Listener去讓子線程能將訊息Push到主線程的Message Quene里,以便觸發主線程的handlerMessage()函數,讓主線程知道子線程的狀態,並在主線程更新UI。
E. Android: 一個Activity開辟的線程,在這個Activity調用finish()的時候會強制關閉這個線程嗎
不會,你可以在onDestory中手動終止該線程