安卓開發入門與面試題01(潭州安卓開發入門教程)

來源:互聯網
上載者:User

標籤:

      今天老師講到安卓的就業市場,說的我都想去面試了,想看看市面上咱們到底可以拿到什麼樣的工資,做什麼樣的行業。說來慚愧,我還只是一個安卓開發的新手,今天就和大家一樣,開始我的安卓開發夢想啟航。這個是潭州安卓開發入門教程裡面最基礎的。

     從來以為學習安卓的都是為了興趣,原來還可以為了就業,可是好難,就像咱們Android開發入門視頻教程QQ群:175229978裡面很多人一樣,連面試題是哪一些都不懂,不過今天我分享到群裡了,也希望在這裡可以協助更多安卓開發入門的小夥伴們。

     

1.什麼是Activity? 

(1.簡單介紹;2.特點;3.使用;4.注意的事項;-à在回答的過程當中記住:1.結合自己的理解—我認為這樣字眼;2.結合開發經驗和項目;3.揚長避短;)

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

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

button.setOnclickLinstener{

}

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

2).特點

生命週期;

3).使用;

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

 

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

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

4).注意的事項;

a.運行在主線程,所以不能做耗時的操作;---》開子線程+handler發訊息更新介面

b.運用生命週期解決一些問題,activity在後台有可能會被銷毀,銷毀之前儲存資料

在onSaveInstanceState(Bundle b)儲存資料;在onCreate(Bundle b)或者onRestoreInstanceState(Bundle b)方法恢複資料。

 

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

(如何作答:1.畫圖;2.分別寫出一個1四個0對應的含義;3.注意事項;)

 

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

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

 

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

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

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

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

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

 

如果被onDestroy了,則是調用onCreate方法。

 

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

 

 

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

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

 

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

onSavedInstanceState(Bundle bundle)銷毀之前儲存資料;重新建立恢複資料onRestoreInstanceState(Bundle bundle)

 

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

 

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

 

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

 

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

為什麼預設情況下橫豎屏切換的時候activity會重新建立?

因為有時候我們自己寫的布局或者自訂控制項都是代碼動態實現的(比如一個控制項的寬度是螢幕的一半),這時候系統就預設直接重新建立。

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

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

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

 

2、設定Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會重新調用各個生命週期,只會執行onConfigurationChanged方法(所以在動態布局的情況下,可以在此方法裡面重新計算和重新整理布局)

 

遊戲開發中, 螢幕的朝向都是寫死的. Android:orientation=”landscap”橫屏 portraint豎屏

 

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

android:theme="@android:style/Theme.Dialog"

  可以自訂一個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);

}

恢複資料回調的方法:(2種)

Public void onRestoreInstanceState(Bundle savedInstanceState)

或者

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.2以前的版本可以用。

2、記錄開啟的Activity:

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

 

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

lists = new ArrayList<Activity>();

 

lists.add(activity);

 

for(Activity activity: lists)

{

activity.finish();

}

 

3、發送特定廣播:

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

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

registerReceiver(receiver, filter)

 

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

 

4、遞迴退出

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

 

 

上面是網上的一些做法.

 

其實 可以通過 intent的flag 來實現.. intent.setFlag(FLAG_ACTIVITY_CLEAR_TOP)啟用一個新的activity,然後在新的activity的oncreate方法裡面 finish掉.

 

講一講你對activity的理解 

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

 

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

(<service 

            android:process=""></service>)

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

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

在子線程中執行 new Thread(){}.start();  AsyncTask非同步任務; IntentService(onHandleIntent方法裡面做耗時操作)

 

特殊情況 ,可以在資訊清單檔配置 service 執行所在的進程 ,讓service在另外的進程中執行 

 

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

基礎資料型別 (Elementary Data Type)可以通過.  Intent 傳遞資料  

在A activity中

Intent intent = new Intent();

intent.putExtra(name, value)  

     Bundle bundle = new Bundle();

     bundle.putBoolean(key, value);

     intent.putExtras(bundle);

extras.putDouble(key, value)

// 通過intent putExtra 方法 基礎資料型別 (Elementary Data Type) 都傳遞 

    

     Intent i = getIntent();

     i.getExtras();

 

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

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

Bundle bundle = new  Bundle();

     bumdle.putShort(key, value);

     intent.putExtras(bumdle);

intent.putExtras(bundle)

--------------

Application 全域裡面存放 對象 ,自己去實現自己的application的這個類,

基礎系統的application , 每個activity都可以取到

-----------------

 

讓對象實現 implements  Serializable 介面把對象存放到檔案上.  

讓類實現Serializable 介面,然後可以通過 ObjectOutputStream   //對象輸出資料流  

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

FileOutputStream fos  = new FileOutputStream(file);

ObjectOutputStream oos = new ObjectOutputStream(fos);

 

Student stu = new Student();

oos.writeObject(stu);

 

 

//從檔案中把對象讀出來  

ObjectInputStream ois = new ObjectInputStream(arg0);

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

或者實現了parcelable介面

檔案/網路 

 

intent.setData(Uri) 

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

 

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

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

 

11. 同一個程式,不同的Activity是否可以放在不同的Task任務棧中?

比方說在啟用一個新的activity時候, 給intent設定flag

Intent的flag添加FLAG_ACTIVITY_NEW_TASK

   這個被啟用的activity就會在新的task棧裡面…

Intent intent = new Intent(A.this,B.class);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(intent);

廣播接收者

 

12. Activity怎麼和service綁定,怎麼在activity中啟動自己應用程式的service(別人的service)?(我沒理解你的意思!)

startService() 一旦被建立  調用著無關   沒法使用service裡面的方法 

bindService () 把service 與調用者綁定 ,如果調用者被銷毀, service會銷毀

bindService() 我們可以使用service 裡面的方法

bindService().  讓activity能夠訪問到 service裡面的方法

構建一個intent對象,

Intent service = new Intent(this,MyService.class);

 通過bindService的方法去啟動一個服務,

    bindService(intent, new MyConn(), BIND_AUTO_CREATE);

ServiceConnection 對象(重寫onServiceConnected和OnServiceDisconnected方法) 和BIND_AUTO_CREATE.

private class myconn implements ServiceConnection

 

{

 

public void onServiceConnected(ComponentName name, IBinder service) {

// TODO Auto-generated method stub

//可以通過IBinder的對象 去使用service裡面的方法

}

 

public void onServiceDisconnected(ComponentName name) {

// TODO Auto-generated method stub

 

}

 

}

這個是前13個會遇到的問題,太多我自己也消化不了,不過希望大家可以變操作邊學習,會好點,第一次用部落格園不知道能不能發附件,具體的我先上傳QQ群:175229978,等我會用了,就發咱們網站。

安卓開發入門與面試題01(潭州安卓開發入門教程)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.