Android筆試和麵試常見題目(四)
自己整理的一些Android常見面試題,歡迎各位參考。 有錯誤或有更好的題目答案可以聯絡修改。
31、兩個Activity之間跳轉必定會執行的是那幾個方法
1.一般情況下比如說有兩個activity,分別叫A,B,當在A裡面啟動B元件的時候, A會呼叫 onPause()方法,然後 B 呼叫 onCreate() ,onStart(), onResume()。
這個時候 B 覆蓋了窗體, A 會呼叫 onStop()方法. 如果 B 是個透明的,或者是對話方塊的樣式, 就不會呼叫 A 的 onStop()方法。
32、如 何 退 出 Activity ? 如 何 安 全 退 出 已 調 用 多 個 Activity 的Application?
1.通常情況使用者退出一個Activity只需要按返回鍵,我們在寫程式碼中可以直接呼叫finish()方法就行。
2.記錄開啟的Activity:每開啟一個Activity,就記錄下來,在需要退出時,關閉每一個Activity即可。
3.傳送特定廣播:在需要結束應用時,傳送一個特定的廣播,每個Activity收到廣播後,關閉即可。
4.遞迴退出:再開啟新的Activity時使用startActivityForResult ,然後自己加標誌,在onActivityResult中處理,遞迴關閉。
33、橫豎屏切換時 Activity 的生命週期
此時的生命週期跟清單檔案裡的配置有關係
1.不設定Activity的android:configChanges時,切屏會重新呼叫各個生命週期,預設首先首先銷燬當前的Activity,然後重新載入。
2.如果設定了Activity android:configChanges=”orientation|keyboardHidden|screenSize”時,切屏不會重新呼叫各個生命週期,只會執行onConfigurationChanged的方法。
34、ListView資料集改變後,如何更新ListView
使用ListView的Adapter的notifyDataSetChanged()方法,該方法會使ListView重新繪製。
35、ListView如何定位到指定的位置
可以通過ListView提供的Lv.setSelection(ListView.getPosition)。
36、Activity啟動模式
Standard
標準模式,每次啟動Activity都會建立一個新的Activity例項,並且將其壓入任務棧棧頂,而不管這個Activity是否已經存在。Activity的啟動三回撥(onCreate()->onStart()->onResume())都會執行。
Singletop
棧頂複用模式,如果有新的Activity已經位於棧頂,則不會建立新的Activity,如果棧頂沒有則會建立。
Singletask
棧內複用模式,建立這樣的Activity的時候,系統會先確認它所需任務棧已經建立,否則先建立任務棧.然後放入Activity,如果棧中已經有一個Activity例項,那麼這個Activity就會被調到棧頂,onNewIntent(),並且singleTask會清理在當前Activity上面的所有Activity.(clear top)
Singleintance
加強版的singleTask模式,這種模式的Activity只能單獨位於一個任務棧內,由於棧內複用的特性,後續請求均不會建立新的Activity,除非這個獨特的任務棧被系統銷燬了
37.在兩個Activity之間如何傳遞一張圖片。
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_target);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();
Intent intent = new Intent(this, ActivityB.class);
intent.putExtra("picture", b);
startActivity(intent);
Bundle extras = getIntent().getExtras();
byte[] b = extras.getByteArray("picture");
Bitmap bmp = BitmapFactory.decodeByteArray(b, 0, b.length);
ImageView image = (ImageView) findViewById(R.id.imageView1);
image.setImageBitmap(bmp);