1. 程式人生 > >Android--面試題整理(一)

Android--面試題整理(一)

1. 什麼是Activity?

四大元件之一,一般的,一個使用者互動介面對應一個activity

setContentView() ,// 要顯示的佈局

, activity 是Context的子類,同時實現了window.callback和keyevent.callback, 可以處理與窗體使用者互動的事件.

button.setOnclickLinstener{

}

我開發常用的的有ListActivity  , PreferenceActivity ,TabAcitivty等…

如果介面有共同的特點或者功能的時候,還會自己定義一個BaseActivity.

進度對話方塊的顯示與銷燬 doubanservice

2. 請描述一下Activity 生命週期。

生命週期描述的是一個類 從建立(new出來)到死亡(垃圾回收)的過程中會執行的方法..

在這個過程中 會針對不同的生命階段會呼叫不同的方法

Activity從建立到銷燬有多種狀態,從一種狀態到另一種狀態時會激發相應的回撥方法,這些回撥方法包括:oncreate ondestroy onstop onstart onresume onpause

其實這些方法都是兩兩對應的,onCreate建立與onDestroy銷燬;

onStart可見與onStop不可見;onResume可編輯(即焦點)與onPause;

對話方塊的彈出, Activity.this

對話方塊是activity的一部分.

這6個方法是相對應的,那麼就只剩下一個onRestart方法了,這個方法在什麼時候呼叫呢?

答案就是:在Activity被onStop後,但是沒有被onDestroy,在再次啟動此Activity時就呼叫onRestart(而不再呼叫onCreate)方法;

如果被onDestroy了,則是呼叫onCreate方法。

最後講自己專案中的經驗,比如說豆瓣客戶端每次進入某個介面的時候都要看到最新的資料,這個重新整理列表的操作 就放在onStart()的方法裡面.

fillData() 這樣保證每次使用者看到的資料都是最新的.

多媒體播放, 播放來電話. onStop() 視訊, 視訊聲音設定為0 , 記錄視訊播放的位置 mediaplayer.pause();

onStart() 根據儲存的狀態恢復現場.mediaplayer.start();

在讀文件的時候 還發現 activity還有兩個方法onPostResume() 和 OnPostCreate()這兩個生命週期的方法,不過開發的時候沒有用到過.

3. 兩個Activity之間跳轉時必然會執行的是哪幾個方法。

一般情況比如說有兩個activity,分別叫A,B,當在A裡面啟用B元件的時候, A 會呼叫 onPause()方法,然後B 呼叫onCreate() ,onStart(), OnResume() ,

這個時候B覆蓋了窗體, A會呼叫onStop()方法.  如果B呢是個透明的,或者是對話方塊的樣式, 就不會呼叫onStop()方法

4. 橫豎屏切換時候Activity的生命週期。

 這個生命週期跟清單檔案裡的配置有關係

1、不設定Activity的android:configChanges時,切屏會重新呼叫各個生命週期

預設首先銷燬當前activity,然後重新載入

Onpause onstop ondestory oncreate onstart onresume

2、設定Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會重新呼叫各個生命週期,只會執行onConfigurationChanged方法

遊戲開發中, 螢幕的朝向都是寫死的.

5. 如何將一個Activity設定成視窗的樣式。

可以自定義一個activity的樣式,詳細見手機衛士的程式詳細資訊

android:theme="@style/FloatActivity" 

E:\day9\mobilesafe\res\values\style

6. 你後臺的Activity被系統 回收怎麼辦?如果後臺的Activity由於某原因被系統回收可了,如何在被系統回收之前儲存當前狀態?

除了在棧頂的activity,其他的activity都有可能在記憶體不足的時候被系統回收,一個activity越處於棧底,被回收的可能性越大.

protected void onSaveInstanceState(Bundle outState) {

    super.onSaveInstanceState(outState);

    outState.putLong("id",1234567890);

}

public void onCreate(Bundle savedInstanceState) {

//判斷savedInstanceState是不是空.

//如果不為空就取出來

        super.onCreate(savedInstanceState);

}

7. 如何退出Activity?如何安全退出已呼叫多個Activity的Application?

退出activity 直接呼叫 finish () 方法 . //使用者點選back鍵 就是退出一個activity

退出activity 會執行 onDestroy()方法 .

1、拋異常強制退出:

該方法通過拋異常,使程式Force Close

驗證可以,但是,需要解決的問題是,如何使程式結束掉,而不彈出Force Close的視窗。

//安全結束程序 android.os.Process.killProcess(android.os.Process.myPid());

2、記錄開啟的Activity

每開啟一個Activity,就記錄下來。在需要退出時,關閉每一個Activity即可。

            List<Activity>lists ; 在application 全集的環境裡面

        lists =new ArrayList<Activity>();

每一個activity在執行oncreate()方法的時候 lists.add(this);

Ondestory() lists.remove(this);

lists.add(activity);

for(Activity activity: lists)

{

    activity.finish();

}

3、傳送特定廣播:

在需要結束應用時,傳送一個特定的廣播,每個Activity收到廣播後,關閉即可。

//給某個activity 註冊接受接受廣播的意圖    

    registerReceiver(receiver,filter)

//如果過接受到的是 關閉activity的廣播  就呼叫finish()方法把當前的activity finish()掉

4、遞迴退出

在開啟新的Activity時使用startActivityForResult,然後自己加標誌,在onActivityResult中處理,遞迴關閉。

404 退出程式

OnActivityResult();

講一講你對activity的理解

把上面的幾點用自己的心得寫出來

8. service是否在main thread中執行,service裡面是否能執行耗時的操作?

預設情況,如果沒有顯示的指定service所執行的程序, Service和activity是執行在當前app所在程序的main thread(UI主執行緒)裡面 

service裡面不能執行耗時的操作(網路請求,拷貝資料庫,大檔案 )

在子執行緒中執行 new Thread(){}.start();

特殊情況 ,可以在清單檔案配置 service 執行所在的程序 ,

讓service在另外的程序中執行

<serviceandroid:process="cn.itcast.xxx"></service>

9. 兩個Activity之間怎麼傳遞資料?

基本資料型別可以通過. Intent 傳遞資料 

extras.putDouble(key, value)

intent.putExtra(name,value) 

// 通過intentputExtra 方法基本資料型別都傳遞

    Bundlebundle = new  Bundle();

    bundle.putShort(key,value);

    intent.putExtras(bundle);

intent.putExtras(bundle)

獲取到啟用他的  getIntent();

        Intent intent = getIntent();

        Bundle bundle= intent.getExtras();

Bundle 類似map的集合

intent.getStringExtra("key","value");

intent.getBooleanExtra("key","value")

Application 全局裡面存放 物件 ,自己去實現自己的application的這個類,基礎系統的application , 每個activity都可以取到

讓物件實現 implements Serializable介面把物件存放到檔案上. 

讓類實現Serializable介面,然後可以通過 ObjectOutputStream        //物件輸出流

       File file = newFile("c:\\1.obj");

       FileOutputStream fos  = new FileOutputStream(file);

       ObjectOutputStream oos = newObjectOutputStream(fos);

       Student stu = newStudent();

       stu.setId("10001");

       stu.setName("zs");

       oos.writeObject(stu);

       FileInputStream fis = newFileInputStream(file);

       ObjectInputStream ois = newObjectInputStream(fis);

        Student stu1 =(Student) ois.readObject();

       System.out.println(stu1.getName());

Parcelable Serializable

Parcelable 把物件序列化到android作業系統的一塊公用的記憶體空間

檔案/網路

//傳遞資料的引用

intent.setData(Uri)

Uri.fromFile();  //大圖片的傳遞

contentResolver.getInputStream(uri);

10. 怎麼讓在啟動一個Activity是就啟動一個service?

在activity的onCreate()方法裡面 startService();

相關推薦

Android--試題整理

1. 什麼是Activity? 四大元件之一,一般的,一個使用者互動介面對應一個activity setContentView() ,// 要顯示的佈局 , activity 是Context的子類,同時實現了window.callback和keyevent.callb

Hadoop試題整理

        lucene是支援隨機讀寫的,而hdfs只支援隨機讀。但是HBase可以來補救。HBase提供隨機讀寫,來解決Hadoop不能處理的問題。HBase自底層設計開始即聚焦於各種可伸縮性問題:表可以很“高”,有數十億個資料行;也可以很“寬”,有數百萬個列;水平分割槽並在上千個普通商用機節點上自動複

嵌入式試題整理

自己整理了一些來自各個公司嵌入式行業的面試的題目。答案在後面(是自己寫的答案,不敢保證100%正確,哈哈,能力有限)。題目都是近兩年的公司面試題 關鍵字volatile有什麼含義?並列舉一個例子。 嵌入式系統總是要使用者變數或暫存器進行位操作。給定一個整變數a,寫兩段

Android試題整理源自鴻洋大神公眾號【201803】的篇BAT試題推送

三月,想必各位程式設計師GG 此刻想要的,莫過於一篇面試寶典。鄙人不才,也從未系統的刷過面試題,以鴻洋大哥一篇面試題為引,略加整理,希望能幫到各位不知道看什麼小夥伴。(大部分知識都是有答案的). 原文連結: [https://mp.weixin.qq.com/s/p3l9wr4DX9

java試題整理1

pmap 復制 java對象 試題 取出 樹形 年輕代和老年代 com 足夠 1、Equals與==的區別?   ==是判斷兩個變量或者實例是不是指向同一個內存地址   equals是判斷兩個變量或者實例所指向的內存地址中的值是不是相同 2、Object有哪些公用方法?  

PHP試題集錦

day clu 數據庫緩存 優勢 腳本 源代碼 任務 頁面 文件 1、用PHP打印出前一天的時間格式是2017-5-10 22:21:21(2分) Answer: $a = date("Y-m-d H:i:s", strtotime("-1 day")); pr

試題整理2

異常處理 特性 重新 有意 contain catch 類型 長度 all 1.什麽是叠代器? Iterator接口提供了很多對集合進行叠代的方法。每一個集合類都包含了可以返回叠代器實例的叠代方法。 叠代器可以在叠代過程中刪除底層集合的元素,但是不可以直接調用集合的re

試題18:在O(1)時間刪除鏈表結點

else mil ptr font 復雜度 節點 else if 開始 nes // 面試題18(一):在O(1)時間刪除鏈表結點 // 題目:給定單向鏈表的頭指針和一個結點指針,定義一個函數在O(1)時間刪除該 // 結點。鏈表結點與函數的定義如下: // struct

java經典試題總結

Java經典面試題總結繼續更新,有需要的小夥伴可以路過不要錯過了!看上一篇面試題總結的反響還是很不錯的,就繼續更新了,也非常感謝各位小夥伴的持續關注…… 這次更偏基礎一些! 1、String 和StringBuffer 的區別? 答:JAVA 平臺提供了兩個類:String 和StringBuffer,

試題總結、TCP協議

宣告:本文主要探討當TCP協議出現在面試筆試場合可能會涉及的問題,每一個知識點討論力求簡潔,便於記憶,但討論深度有限,如要深入研究可點選參考連結,希望對正在找工作的同學有點幫助。 一、TCP協議簡介 一般問到TCP協議的時候 最常見的是TCP連線建立和斷開的過程,也就是三次握手和四次揮手,兩

PAT乙級試題整理——牛客網15分真題整理

牛客網上 共有真題六套,其中每套題有15分題一道,20分題目3道,25分題目1道,共計100分。考試時要求考生在180分鐘內完成。我之前只學過Java和C#,沒有學過C語言,粗淺學習了一下C語言基本語法,想借刷題這個機會好好體會一下面向過程的設計語言的精髓。這裡計劃: 1.先說題

java試題集錦

  第一,談談final, finally, finalize的區別。 最常被問到。 final:可以修飾非抽象類和非抽象類成員方法和變數     final類不能被繼承,沒有子類,final類中的方法預設是final     被宣告為final的變數必須在申明

試題55:二叉樹的深度

一、題目 輸入一棵二叉樹的根結點,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。 二、關鍵 三、解釋 四、程式碼 #include <cstdio> #include "..\Utilities\

試題58:翻轉單詞順序簡單

一、題目 輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。為簡單起見,標點符號和普通字母一樣處理。例如輸入字串"I am a student. ",則輸出"student. a am I"。 二、關鍵 1.反轉兩次。第一次:“.tneduts a ma

試題57:和為s的兩個數字

一、題目 輸入一個遞增排序的陣列和一個數字s,在陣列中查詢兩個數,使得它們的和正好是s。如果有多對數字的和等於s,輸出任意一對即可。 二、關鍵 1.兩個指標,一個指向頭一個指向尾,按照規則向中間靠攏。 三、解釋 四、程式碼 #include <cstdio&

【JAVA面試】java試題整理1

                                       java面試題整理(1) JAVA常考點總結1 目錄

【JAVA面試】java試題整理2

                                           java面試題整理(2) JAVA常考點總結2 目錄 1、

【JAVA面試】java試題整理3

                                     java面試題整理(3) JAVA常考點3 目錄 1. 講下JAVA的執行時區域 回答:執行時資料區整體分為兩類 執行緒私有和執行

【JAVA面試】java試題整理4

                                           java面試題整理(4) JAVA常考點4 目錄 Set集合如何保證不重複 弄清怎麼個邏輯達到元素不重複的,原始碼先上

SpringMvc 常見面試題整理

你對springmvc的介紹? 1. Spring 框架提供的構建web應用的模組 2. 它是基於servlet功能實現的,通過實現Servlet介面的DispatcherServlet來封裝其核