我的位置: 首頁 > 學習專區 > 安卓技術 > Android面試題

Android面試題

2012-01-17 16:52:00
來源:
[導讀]   Android的國際化與本地化  internationalization (國際化)簡稱 i18n,因為在i和n之間還有18個字符,localization(本地化 ),簡稱L1...

Android的國際化與本地化

internationalization (國際化)簡稱 i18n,因為在i和n之間還有18個字符,localization(本地化 ),簡稱L10n。 一般說明一個地區的語言時,用 語言_地區的形式,如 zh_CN, zh_TW.

各國語言縮寫 http://www.loc.gov/standards/iso639-2/php/code_list.php

國家和地區簡寫 http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html

android 對i18n和L10n提供了非常好的支持。android沒有專門的API來提供國際化,而是通過對不同resource的命名來達到國際化,同時這種命名方法還可用于對硬件的區分,如不同的新視屏用不同的圖片。

在eclipse的工程中,res目錄有默認幾項resource,如 drawable, layout,menu,values

其余還有

res/anim/ 用來放置動畫

res/xml/ 用來放置style theme等xml定義。

res/raw/ 用來放置data數據

我們引用這些resource時候,在java代碼中是通過R.resource_type.resource_name的方式來使用,如setTitle(R.string.main_title);

還有一種是在xml中直接引用,如

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/hello"

/>

引用了名字為hello的字符串。當程序運行時,通過Resource類會裝載strings.xml中名字為hello的字符串。但Resource類裝載strings.xml時會根據當前手機的設置來選擇裝載哪一個xml文件。這些手機設置有


MCC and MNC, Language and region, Screen dimensions, Wider/taller screens, Screen orientation,Screen pixel density, Touchscreen type, SDK version,也就是說通過手機當前語言區域,屏幕的大小,屏幕像素,以及當前android sdk的版本號來選擇。通過把strings.xml放置在以這些選項命名的文件夾下,Resource類就能正確的裝載所需的字符串。

我們以不同的local和region來做一次國際化,首先values表示默認的字符串,也即當Resource找不到匹配的資源時,默認使用values文件夾下的資源,其余 drawable等資源也是同樣的。

當命名這些文件夾的名字時,不同的選項用-分開,而且次序必須和 andorid 文檔中table http://developer.android.com/guide/topics/resources/resources-i18n.html#AlternateResources

文件夾的命名必須都是小寫字符,否則在一些大小敏感的文件系統中可能會出錯,如果你用大寫,eclipse的adt都會自動報錯。小寫字母r表示region的意思。 上圖命名了中文簡體和繁體以及默認選項,在strings.xml中除了字符串本身不一樣,xml中定義該字符串的名字,id都是一樣的。所以在代碼或者xml中引用該資源時,只要引用名字即可或者id即可,程序啟動時候Resource類回到相應的目錄下去尋找正確的字符串(資源)

通過在Settings中設置locale& Text 我們可以讓Resource類來選擇相應文件夾下的內容,

選擇英語時候結果如下,也即選擇了 values下的strings.xml

選擇 chinese(china)時,也即選了 values-zh-rcn目錄下的strings.xml

選擇 chinese(taiwan)時,也即選了 values-zh-rtw目錄下的strings.xml

其余手機的選項,像屏幕的像素等都可以建立相應得目錄。

Android常用控件的信息!

單選框(RadioButton與RadioGroup):

RadioGroup用于對單選框進行分組,相同組內的單選框只有一個單選框被選中。

事件:setOnCheckedChangeListener(),處理單選框被選擇事件。把RadioGroup.OnCheckedChangeListener實例作為參數傳入。

多選框(CheckBox):

每個多選框都是獨立的,可以通過迭代所有的多選框,然后根據其狀態是否被選中在獲取其值。

事件:setOnCheckChangeListener()處理多選框被選擇事件。把CompoundButton.OnCheckedChangeListener實例作為參數傳入

下拉列表框(Spring):

Spinner.getItemAtPosition(Spinner.getSelectedItemPosition());獲取下拉列表框的值。

事件:setOnItemSelectedListener(),處理下拉列表框被選擇事件把AdapterView.OnItemSelectedListener實例作為參數傳入;

拖動條(SeekBar):

SeekBar.getProgress()獲取拖動條當前值

事件:setOnSeekBarChangeListener(),處理拖動條值變化事件,把SeekBar.OnSeekBarChangeListener實例作為參數傳入。

菜單(Menu):

重寫Activity的onCreatOptionMenu(Menu menu)方法,該方法用于創建選項菜單,咋用戶按下手機的”Menu”按鈕時就會顯示創建好的菜單,在onCreatOptionMenu(Menu Menu)方法內部可以調用Menu.add()方法實現菜單的添加。

重寫Activity的onMenuItemSelected()方法,該方法用于處理菜單被選擇事件。

進度對話框(ProgressDialog):

創建并顯示一個進度對話框:ProgressDialog.show(ProgressDialogActivity.this,”請稍等”,”數據正在加載中….”,true);

設置對話框的風格:setProgressStyle()

ProgressDialog.STYLE_SPINNER 旋轉進度條風格(為默認風格)

ProgressDialog.STYLE_HORIZONTAL 橫向進度條風格

Android系統的架構!

android的系統架構和其操作系統一樣,采用了分層的架構。從架構圖看,android分為四個層,從高層到低層分別是應用程序層、應用程序框架層、系統運行庫層和linux核心層。

1.應用程序

Android會同一系列核心應用程序包一起發布,該應用程序包包括email客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯系人管理程序等。所有的應用程序都是使用JAVA語言編寫的。

2.應用程序框架

開發人員也可以完全訪問核心應用程序所使用的API框架。該應用程序的架構設計簡化了組件的重用;任何一個應用程序都可以發布它的功能塊并且任何其它的應用程序都可以使用其所發布的功能塊(不過得遵循框架的安全性限制)。同樣,該應用程序重用機制也使用戶可以方便的替換程序組件。

隱藏在每個應用后面的是一系列的服務和系統, 其中包括;

* 豐富而又可擴展的視圖(Views),可以用來構建應用程序, 它包括列表(lists),網格(grids),文本框(text boxes),按鈕(buttons), 甚至可嵌入的web瀏覽器。

* 內容提供器(Content Providers)使得應用程序可以訪問另一個應用程序的數據(如聯系人數據庫), 或者共享它們自己的數據

* 資源管理器(Resource Manager)提供 非代碼資源的訪問,如本地字符串,圖形,和布局文件( layout files )。

* 通知管理器 (Notification Manager) 使得應用程序可以在狀態欄中顯示自定義的提示信息。

* 活動管理器( Activity Manager) 用來管理應用程序生命周期并提供常用的導航回退功能。

有關更多的細節和怎樣從頭寫一個應用程序,請參考 如何編寫一個 Android 應用程序.

3.系統運行庫

1)程序庫

Android 包含一些C/C++庫,這些庫能被Android系統中不同的組件使用。它們通過 Android 應用程序框架為開發者提供服務。以下是一些核心庫:

* 系統 C 庫 – 一個從 BSD 繼承來的標準 C 系統函數庫( libc ), 它是專門為基于 embedded linux 的設備定制的。

* 媒體庫 – 基于 PacketVideo OpenCORE;該庫支持多種常用的音頻、視頻格式回放和錄制,同時支持靜態圖像文件。編碼格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。

* Surface Manager – 對顯示子系統的管理,并且為多個應用程序提 供了2D和3D圖層的無縫融合。

* LibWebCore – 一個最新的web瀏覽器引擎用,支持Android瀏覽器和一個可嵌入的web視圖。

* SGL – 底層的2D圖形引擎

* 3D libraries – 基于OpenGL ES 1.0 APIs實現;該庫可以使用硬件 3D加速(如果可用)或者使用高度優化的3D軟加速。

* FreeType -位圖(bitmap)和矢量(vector)字體顯示。

* SQLite – 一個對于所有應用程序可用,功能強勁的輕型關系型數據庫引擎。

2)Android 運行庫

Android 包括了一個核心庫,該核心庫提供了JAVA編程語言核心庫的大多數功能。

每一個Android應用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。Dalvik被設計成一個設備可以同時高效地運行多個虛擬系統。 Dalvik虛擬機執行(.dex)的Dalvik可執行文件,該格式文件針對小內存使用做了優化。同時虛擬機是基于寄存器的,所有的類都經由JAVA編譯器編譯,然后通過SDK中 的 “dx” 工具轉化成.dex格式由虛擬機執行。

Dalvik虛擬機依賴于linux內核的一些功能,比如線程機制和底層內存管理機制。

4.Linux 內核

Android 的核心系統服務依賴于 Linux 2.6 內核,如安全性,內存管理,進程管理, 網絡協議棧和驅動模型。 Linux 內核也同時作為硬件和軟件棧之間的抽象層。

開機自動運行程序!

Android實現開機自動運行程序2009-12-31 15:01:17.0 開機 自動 運行 程序 有些時候,應用需要在開機時就自動運行,例如某個自動從網上更新內容的后臺service。怎樣實現開機自動運行的應用?在撰寫本文時,聯想到高煥堂先生以“Don”t call me, I”ll call you back!”總結Android框架,真是說到點子上了。理解這句話的含義,許多有關Android平臺上實現某種功能的問題,都能迎刃而解。

使用場景:手機開機后,自動運行程序,在屏幕上顯示”Hello. I started!”字樣。

背景知識:當Android啟動時,會發出一個系統廣播,內容為ACTION_BOOT_COMPLETED,它的字符串常量表示為android.intent.action.BOOT_COMPLETED。只要在程序中“捕捉”到這個消息,再啟動之即可。記住,Android框架說:Don”t call me, I”ll call you back。我們要做的是做好接收這個消息的準備,而實現的手段就是實現一個BroadcastReceiver。

代碼解析:

1、界面Activity:SayHello.java

package com.ghstudio.BootStartDemo;

import android.app.Activity;

import android.os.Bundle;

import android.widget.TextView;

public class SayHello extends Activity {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

TextView tv = new TextView(this);

tv.setText(“Hello. I started!”);

setContentView(tv);

}

}

這段代碼很簡單,當Activity啟動時,創建一個TextView,用它顯示”Hello. I started!”字樣。

2、接收廣播消息:BootBroadcastReceiver.java

package com.ghstudio.BootStartDemo;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

public class BootBroadcastReceiver extends BroadcastReceiver {

static final String ACTION = “android.intent.action.BOOT_COMPLETED”;

@Override

public void onReceive(Context context, Intent intent) {

if (intent.getAction().equals(ACTION)){

Intent sayHelloIntent=new Intent(context,SayHello.class);

sayHelloIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

context.startActivity(sayHelloIntent);

}

}

}

該類派生自BroadcastReceiver,覆載方法onReceive中,檢測接收到的Intent是否符合BOOT_COMPLETED,如果符合,則啟動SayHello那個Activity。

3、配置文件:AndroidManifest.xml

package="com.ghstudio.BootStartDemo"

android:versionCode="1"

android:versionName="1.0">

android:label="@string/app_name">

注意其中粗體字那一部分,該節點向系統注冊了一個receiver,子節點intent-filter表示接收android.intent.action.BOOT_COMPLETED消息。不要忘記配置android.permission.RECEIVE_BOOT_COMPLETED權限。

完成后,編譯出apk包,安裝到模擬器或手機中。關機,重新開機。

如果是系統進程的話,需要加入init配置文件來啟動,隨著linux啟動而啟動

注:還有一些關于Activity之間的數據傳遞與Intent的具體應用、Activity的生命周期等老師的PPT上已經都有了。具體的筆試題目前只有華為有筆試題,并且也只是一般的選擇題,其余公司都是一些JAVA的基礎題,只會在面試的時候問一些關于Android的題,并且有的公司經常問一些關于底層C庫的調用與Android隱式API的題。

評論
熱點專題
>>
相關文章推薦
>>
好吊妞免费视频在线观看,久久亚洲国产人成综合网,久久精品国产2020,欧美精品综合在线
日韩亚洲欧美中文字幕第六页 | 中文字幕乱码中文乱码51精品 | 天天躁久久躁中文字字幕 | 婷婷网亚洲色偷偷男人的天堂 | 亚州十八禁免费不卡在线视颖 | 亚洲欧美俄罗斯在线观看 |