Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android--面試題整理(一)

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即可。

Listlists ; 在application 全集的環境裡面

lists =new ArrayList();

每一個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在另外的進程中執行

"cn.itcast.xxx">

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都可以取到

讓對象實現 implementsSerializable接口把對象存放到文件上.

讓類實現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();

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