Android AsyncTaskに関する面接問題
4008 ワード
AsyncTaskはandroid 4.0以降androidはスレッドプールで実現され、最大5スレッドまで開くので、いくつかのAsyncTaskが実行されるときの順序はランダムで、
5つのAsyncTaskが順次実行された後、もう1つのAsyncTaskがある場合、最後の1つは保留され、5つのAsyncTaskの1つが実行された後、最後の1つが挿入されて実行されます.
スタックの説明:
A->B->C C CがsingleTopまたはsingletaskの場合、最後のCはoncreateを実行しません.
A singletop A->B->C->Aの場合、Aはoncreateを再実行し、Cに戻る
A singleTaskの場合、Aはoncreateを実行せず、ロールバックはホームに戻ります
5つのAsyncTaskが順次実行された後、もう1つのAsyncTaskがある場合、最後の1つは保留され、5つのAsyncTaskの1つが実行された後、最後の1つが挿入されて実行されます.
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
実行結果: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を実行せず、ロールバックはホームに戻ります