Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android AsyncTask相關的一些面試題目

android AsyncTask相關的一些面試題目

編輯:關於Android編程

AsyncTask在android4.0之後android采用線程池來實現,最多開5個線程,所以幾個AsyncTask執行的時候順序是隨機的,

如果5個AsyncTask順序執行之後,又有一個AsyncTask,那最後一個會被掛起,當5個AsyncTask有一個被執行完以後最後一個會被插入執行

public class TestActivity extends Activity {

	
	 @Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.test);
		new fetchServerVersionAndSupportOsHttpTasker().execute();
		new fetchServerVersionAndSupportOsHttpTasker1().execute();
		new fetchServerVersionAndSupportOsHttpTaske2().execute();

	}


	public class fetchServerVersionAndSupportOsHttpTasker extends AsyncTask {

	        @Override
	        protected String doInBackground(Object... params) {
	        	System.out.println("=============first doInBackground");
	        	CommonHttpRequest.getForceUpgradeRelatedInfo();
	        	return "aaaa";
	        }

	        @Override
	        protected void onPostExecute(String result) {
	            if(!TextUtils.isEmpty(result)) {
	              System.out.println("===============first postexecute");
	            }
	        }
	    }
	 
	 
	 public class fetchServerVersionAndSupportOsHttpTasker1 extends AsyncTask {

	        @Override
	        protected String doInBackground(Object... params) {
	        	System.out.println("=============second doInBackground");
	        	CommonHttpRequest.getForceUpgradeRelatedInfo();
	        	return "bbb";
	        }

	        @Override
	        protected void onPostExecute(String result) {
	            if(!TextUtils.isEmpty(result)) {
	              System.out.println("===============second postexecute");
	            }
	        }
	    }
	 
	 
	 public class fetchServerVersionAndSupportOsHttpTaske2 extends AsyncTask {

	        @Override
	        protected String doInBackground(Object... params) {
	        	System.out.println("=============third doInBackground");
	        	//CommonHttpRequest.getForceUpgradeRelatedInfo();
	        	return "ccc";
	        }

	        @Override
	        protected void onPostExecute(String result) {
	            if(!TextUtils.isEmpty(result)) {
	              System.out.println("===============third postexecute");
	            }
	        }
	    }

}
執行結果:
10-16 14:03:38.872: I/System.out(23132): =============third doInBackground
10-16 14:03:38.872: I/System.out(23132): =============second doInBackground
10-16 14:03:38.872: I/System.out(23132): =============first doInBackground
10-16 14:03:38.892: I/System.out(23132): ===============third postexecute
10-16 14:03:38.922: I/System.out(23132): ===============second postexecute
10-16 14:03:38.922: I/System.out(23132): ===============first postexecute


堆棧的介紹:

 堆棧就是這樣一種數據結構。它是在內存中開辟一個存儲區域,數據一個一個順序地存入(也就是“壓入——push”)這個區域之中。有一個地址指針總指向最後一個壓入堆棧的數據所在的數據單元,存放這個地址指針的寄存器就叫做堆棧指示器。開始放入數據的單元叫做“棧底”。數據一個一個地存入,這個過程叫做“壓棧”。在壓棧的過程中,每有一個數據壓入堆棧,就放在和前一個單元相連的後面一個單元中,堆棧指示器中的地址自動加1。讀取這些數據時,按照堆棧指示器中的地址讀取數據,堆棧指示器中的地址數自動減 1。這個過程叫做“彈出pop”。如此就實現了後進先出的原則。 


TASK1包含三個activity分別是:p,q,r;啟動順序為p-->q-->r
TASK2包含兩個activity分別是:a,b;啟動順序為a-->b;
TASK1首先啟動p,那麼這個p就是執行這個任務的根activity,任務也是定義在這個activity下的。通過屬性Manifest文件中的activity屬性中的taskAffinity來定義。
        (1)此時p啟動後就被壓入堆棧,因為此時堆棧中只有這一個activity,所以p處於棧底,也處於棧頂。此時用戶能夠看到的就是p界面。
        (2)p啟動q後,q入棧。此時棧頂為q。q呈現的界面將p覆蓋,p進入後台運行(此時是activity生命周期的pause狀態)或者進入後台但不運行(此時是activity生命周期的stop狀態)。
        (3)q啟動r後,r入棧。此時棧頂為r。r呈現的界面將q覆蓋,q進入後台運行。
        (4)按back鍵後就是調用finish函數結束r (activity)的生命。此時r出棧,r的生命周期結束。
        (5)繼續back鍵,結束q的生命,此時q出棧。
        (6)繼續back鍵,結束p的生命,此時p出棧。
        (7)此時棧內所有activity都已出棧,所以就會顯示HOME屏幕界面.

如果A->B->C->C如果C是singleTop或是singletask那麼最後一次C不會執行oncreate
A如果是singletop A->B->C->A那麼A會被重新執行oncreate,回退到C A如果是singleTask,則A不會執行oncreate,回退會回到home


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved