第一篇:Android總結(jié)
Android四大組件:
Activity—表現(xiàn)屏幕界面
Service—后臺服務(wù)
BroadcastReceiver—實現(xiàn)廣播機制
ContentProvider—實現(xiàn)數(shù)據(jù)存儲
Intent類:用來啟動程序并傳遞信息的類
用于Activity、Receiver、Service之間進行交互的類,通過無參構(gòu)造方法創(chuàng)建對象,增加其action、category、data、extra等屬性進行信息傳遞,并通過Activity中的startActivity(Intent intent)進行界面的跳轉(zhuǎn);通過Context中的StartService(Intent intent)進行服務(wù)跳轉(zhuǎn);通過Context中的registerReceive(Intent intent)對廣播進行注冊,并通過sendBroadcast()進行無序消息發(fā)送,或可以通過SendOrderedBroadcast()進行有序的消息發(fā)送。Handler類:
用來發(fā)送和處理消息,并配合主線程完成UI的更新;消息Message/Runnable傳遞通過MessageQueue(消息隊列,先進先出)進行傳遞,并通過Lopper進行接收,傳遞的消息可以為Message對象,也可以是Runnable對象;接收方法通過HandleMessage(Message msg)進行獲取。SharedPreferences類:
一般用于第一次登錄時的設(shè)置,或者是各個界面的一些小型格式設(shè)置,如字體等。是本地的小型共享數(shù)據(jù)庫,可以通過Context的靜態(tài)方法getSharedPreferences獲得其對象,對象內(nèi)的值均為鍵值對進行儲存。通過SharedPreferences對象調(diào)用editor()獲取SharedPreferences.Editor對象,向共享數(shù)據(jù)庫中增加數(shù)據(jù),putString(),并提交數(shù)據(jù),commit();通過SharedPreferences對象獲取共享數(shù)據(jù)庫中的數(shù)據(jù),getString()。
ViewPager:實現(xiàn)界面滑動的類;
通過設(shè)置OnPagerChangedListener設(shè)置ViewPager的監(jiān)聽事件;
實現(xiàn)流程:
①布局文件中設(shè)置ViewPager控件;
②代碼中進行綁定控件;
③通過繼承PagerAdapter抽象類進行設(shè)置適配器,并傳遞數(shù)據(jù)源;
④適配器中實現(xiàn)兩個抽象方法,兩個重寫方法:getCount()—獲取滑動界面的數(shù)量,isViewFromObject()—判斷視圖是否是來自于Object文件中;重寫兩個方法,分別為destoryItem—銷毀指定位置的視圖;InstantiateItem(),設(shè)置指定位置的視圖;
Timer與TimerTask類:
Timer為計時器的類,通過無參構(gòu)造方法可以獲取對象,通過Timer.schedule(TimerTask task,long time)進行設(shè)置多久后執(zhí)行某任務(wù),當任務(wù)執(zhí)行完后,取消計時的功能,Timer.cancle();TimerTask類為抽象類,實例化時,必須重寫run方法;執(zhí)行的內(nèi)容,均在run方法中進行設(shè)置,并且執(zhí)行時,已在子線程中進行執(zhí)行。自定義View:用到的類有Paint、Canvas、Spec、SpecF、Path、View.MeasureSpec、Timer、TimerTask;
抽象類,通過子類繼承,獲取對象;在布局文件中綁定后,通過代碼,設(shè)置自定義View的屬性;自定義View中,通過重寫OnMeasure方法,對布局文件中的尺寸進行測量,并由View中的setMeasureDimenson()方法,進行數(shù)據(jù)的保存;通過重寫Ondraw方法,進行繪圖;當需要繪制動態(tài)圖形時,使用計時器Timer的schedule(TimerTask,long time,delay time2)方法,在time時間后,每隔time2時間,重寫執(zhí)行run方法中的內(nèi)容;將耗時的操作設(shè)置在run方法中,并通過View中的invalidate()方法刷新主線程中的繪的圖形,通過postInvalidate()刷新子線程中的圖形。數(shù)據(jù)庫:
常用的數(shù)據(jù)庫有Oracle,需要安裝和配置的大型收費數(shù)據(jù)庫;MySQL是中型數(shù)據(jù)庫,同樣需要安裝配置,但不需要收費;Sqlite是小型免費的嵌入式數(shù)據(jù)庫,占用內(nèi)存低,最新版本為3.0。Sqlite數(shù)據(jù)庫需要通過SqliteDatabaseOpenHelper進行創(chuàng)建數(shù)據(jù)庫,并通過SqliteDatabase進行數(shù)據(jù)庫的操作。輔助類是抽象類,通過繼承,重寫兩個方法,并在子類的構(gòu)造方法中通過OpenHelper的構(gòu)造方法(Context context,String SqlName,SqliteDatabase.CursorFactory factory,int version)進行數(shù)據(jù)庫的創(chuàng)建,在onCreate方法中,進行數(shù)據(jù)庫表的創(chuàng)建,在onUpdate中進行數(shù)據(jù)庫的版本更新。在數(shù)據(jù)庫的操作類中,執(zhí)行exect方法,通過sql語句對數(shù)據(jù)庫進行操作。Create table student(_id integer primary key auto increament ,name text);insert into student(_id,name)values(1,zx);delete from student where _id=1;update student set _id=2 where name=zx;select *from student;ListView、GridView適配器的優(yōu)化:
將布局文件中的控件進行封裝,當視圖加載時,判斷可變視圖是否存在,當不存在時,通過布局文件獲取視圖,并新建封裝類,將地址通過setTag()進行發(fā)送;當視圖存在時,重復(fù)利用地址—getTag()。反射:
存儲數(shù)據(jù)的方式:
共享數(shù)據(jù)庫、數(shù)據(jù)庫、文件、網(wǎng)絡(luò)、內(nèi)容提供者
廣播:
廣播傳播時,需要接收者、發(fā)送者、廣播頻道;根據(jù)發(fā)送者的發(fā)送方式不同,分為有序廣播、無序廣播;有序廣播為接收者有接收順序,根據(jù)設(shè)置的優(yōu)先級不同,確定先后順序,接收者同時也是發(fā)送者,向后面的廣播發(fā)送消息,發(fā)送過程中,可以添加信息,也可以停止廣播的傳輸;無序廣播,接收者之間無聯(lián)系,均從發(fā)送者處接收信息;廣播在傳輸過程中,不能被添加信息,也不可能被停止。廣播在發(fā)送前,需要對接收者進行注冊,注冊方式有兩種,動態(tài)注冊、靜態(tài)注冊。動態(tài)注冊,是在代碼中進行,通過Context對象調(diào)用靜態(tài)方法進行注冊,所有的廣播均可以用動態(tài)注冊,其生命周期依賴于應(yīng)用,相對于靜態(tài)注冊,比較節(jié)省內(nèi)存;靜態(tài)方法在清單文件中進行注冊,部分系統(tǒng)廣播不能通過靜態(tài)注冊進行,其生命周期依賴于系統(tǒng),當系統(tǒng)啟動,即運行接收廣播,較耗內(nèi)存。廣播接收者需要繼承BroadcastReceiver,并實現(xiàn)抽象方法onReceive(),通過回調(diào)接口,進行數(shù)據(jù)的傳輸。注意:廣播發(fā)送前,必須進行接收者的注冊,并且,當顯示跳轉(zhuǎn)時,不需要意圖過濾器。安卓布局:九種布局
線性布局,水平或垂直方向兩種格式,主要特點為權(quán)重,即規(guī)定各控件在視圖中的占有的比例;
相對布局,相對于父控件或兄弟控件的布局,各控件需指定相對位置; 絕對布局,指定各控件在視圖中的絕對位置,幾乎不再使用; 表格布局,子布局放在行中,列由控件表示(TableRow); 幀布局:覆蓋前面布局的布局,一般用于暫停按鈕等; 風(fēng)格布局:可以跨行、跨列的布局,占滿換行;
左右側(cè)滑:可以實現(xiàn)左右側(cè)滑,通過設(shè)置主菜單和二級菜單設(shè)置左右兩個菜單; 下拉刷新:設(shè)置下拉刷新、上拉加載的功能; 抽屜布局;
安卓版本及對應(yīng)的API:
1.6—4;2—7;3—11;4—15;4.3—18;5—20;5.1—21;6—23;7—25; 安卓四層架構(gòu):
應(yīng)用層:Java語言開發(fā),主要從事App開發(fā);
運行庫層:Java語言與C語言,View視圖、管理類等的開發(fā); 架構(gòu)層:C語言與Linux語言,各種框架、瀏覽器等; 內(nèi)核層:Linux、C語言,開發(fā)各種驅(qū)動; 安卓四大組件:
Activity:界面,實現(xiàn)程序與用戶之間的交換,有自己的生命周期,七個生命周期;4種啟動模式 Service:
BroadcastReceive:三要素,發(fā)送者、接收者、發(fā)送頻道(Intent);類型:有序(接收有序,有數(shù)據(jù)傳送,可以攔截數(shù)據(jù))、無序廣播(相對);注冊方式:靜態(tài)注冊,持久監(jiān)聽,占用內(nèi)存比較高生命周期跟隨系統(tǒng),動態(tài)注冊(代碼中),所有廣播都可以動態(tài)注冊,部分系統(tǒng)廣播不能動態(tài)注冊,臨時監(jiān)聽,占用內(nèi)存較少,生命周期隨應(yīng)用進行;
ContentProvide:不能存放數(shù)據(jù),五種存放數(shù)據(jù)方式之一,特點為:①為數(shù)據(jù)的獲取等操作添加一個統(tǒng)一的接口②可以實現(xiàn)跨應(yīng)用訪問數(shù)據(jù);③可以實現(xiàn)Android中通訊錄、消息、音頻、視頻等的訪問或操作;通過ContentReceive進行數(shù)據(jù)的訪問,可以對數(shù)據(jù)進行增刪改查操作。
動畫: IO流: 序列化: AlertDialog:
Set實現(xiàn)類: 手機電量檢測:
自定義SurfaceView:
自定義View:三個構(gòu)造方法的區(qū)別
Message:Handler.obtain/new/Message.obtain
HttpUriConnection訪問網(wǎng)絡(luò)
gride 異步任務(wù) 動畫
抽象類和接口 反射 克隆 序列化 側(cè)滑的實現(xiàn) 數(shù)據(jù)庫 Socket:
Gson解析
異步任務(wù)和子線程區(qū)別 WebView 版本更新 照片的圓角化
Collection與Collections Sql語句
MVP框架與MVC: TCP與UDP的區(qū)別: 一鍵分享的流程: Http協(xié)議的理解: 不使用框架訪問網(wǎng)絡(luò): List集合與set集合: 自定義View的流程: 線性布局的特點: ViewPager的原理: 服務(wù)的啟動方式:
Activity的啟動方式: Xml數(shù)據(jù)解析:
第二篇:Android WebView總結(jié)
Android WebView總結(jié)
1、添加權(quán)限:AndroidManifest.xml中必須使用許可“Android.permission.INTERNET”,否則會出web page not available錯誤。
2、在要Activity中生成一個WebView組件:WebView webView = new WebView(this);
3、設(shè)置WebView基本信息:
如果訪問的頁面中有Javascript,則webview必須設(shè)置支持Javascript。
webview.getSettings().setJavaScriptEnabled(true);
觸摸焦點起作用
requestFocus();
取消滾動條
this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);
4、設(shè)置WevView要顯示的網(wǎng)頁:
互聯(lián)網(wǎng)用:webView.loadUrl("");本地文件存放在:assets文件中
5、如果希望點擊鏈接由自己處理,而不是新開Android的系統(tǒng)browser中響應(yīng)該鏈接。給WebView添加一個事件監(jiān)聽對象(WebViewClient)
并重寫其中的一些方法
shouldOverrideUrlLoading:對網(wǎng)頁中超鏈接按鈕的響應(yīng)。
當按下某個連接時WebViewClient會調(diào)用這個方法,并傳遞參數(shù):按下的url
onLoadResource
onPageStart
onPageFinish
onReceiveError
onReceivedHttpAuthRequest6、如果用webview點鏈接看了很多頁以后,如果不做任何處理,點擊系統(tǒng)“Back”鍵,整個瀏覽器會調(diào)用finish()而結(jié)束自身,如果希望瀏覽的網(wǎng)頁回退而不是退出瀏覽器,需要在當前Activity中處理并消費掉該Back事件。
覆蓋Activity類的onKeyDown(int keyCoder,KeyEvent event)方法。
public boolean onKeyDown(int keyCoder,KeyEvent event){
if(webView.canGoBack()&& keyCoder == KeyEvent.KEYCODE_BACK){
webview.goBack();//goBack()表示返回webView的上一頁面
return true;
}
return false;
}
第三篇:Android 課程總結(jié)
一、Android開發(fā)環(huán)境的搭建。
1、Android SDK的安裝;
2、ADT的安裝和配置;
3、Android 模擬器的配置。
二、編寫第一個Android程序───Hello World(1學(xué)時)
1、創(chuàng)建一個Android應(yīng)用程序的步驟;
2、Android 應(yīng)用程序目錄結(jié)構(gòu);
3、AndroidManidest.xml文件的作用;
4、Android相關(guān)資源文件的作用。
三、Activity及Activity和Intent(2學(xué)時)
1、Activity的主要作用;
2、創(chuàng)建一個Activity的方法;
3、在AndroidManifest.xml文件中的注冊應(yīng)用Activity的方法;
4、在Activity中添加控件的方法;
5、多個Activity之間的切換;
6、Intent的基本作用;
7、在一個Activity中啟動另一個Activity的方法;
8、使用Intent在Activity中傳遞數(shù)據(jù)的基本方法。
四、常見控件的使用方法(基礎(chǔ))
1、TextView的使用方法;
2、EditText的使用方法;
3、Button的使用方法;
4、Menu的使用方法。
五、Activity的生命周期(2學(xué)時)
1、Activity的七個周期:
① OnCreate();② OnDestroy();③ OnPause();④ OnRestart();⑤ OnResume();⑥ OnStart();⑦ OnStop();
2、Task的基本概念;
3、Activity和Task之間的關(guān)系;
4、對話框風(fēng)格的Activity的使用方法。
六、Activity的布局(3學(xué)時)
1、LinearLayout的使用方法;
2、TableLayout的使用方法;
3、LinearLayout和TableLayout的嵌套使用;
4、RelativeLayout的使用方法(重點、難點)
七、常用控件是使用方法二(2學(xué)時)
1、RadioGroup和RadioButton的使用方法;
2、CheckBox的使用方法;
3、Toast的基本用法。
4、ProgressBar的使用方法;
5、ListView的用法。
八、Handler的使用方法(2學(xué)時)
1、Handler的基本概念;
2、Handler的基本用法;
3、使用Handler更新ProgressBar
4、Handler與線程;
5、Bundle的用法;
6、在新線程中處理消息的方法。
九、SQLite使用方法
1、SQLite介紹;
2、SQLiteOpenHeper使用方法;
3、使用adb訪問SQLite
4、增、刪、改、查。
十、Android文件下載
1、使用HTTP協(xié)議下載文件;
2、將下載的文件寫入SDCARD。
十一、Content Provider初步(2學(xué)時)
1、Content Provider的基本概念;
2、Uri;
3、Content Provider的實現(xiàn)方法。
十二、XML文件的解析方法
1、什么是SAX;
2、SAX的基本原理;
3、SAX常用接口;
4、SAX解析。
十三、廣播機制(2學(xué)時)
1、Android的廣播機制(圖鑒);
2、BroadCastReceive的作用;
3、BroadCastReceive的編寫方法;
4、BroadCastReceive的生命周期。
5、注冊BroadCastReceive的方法;
6、Android內(nèi)置BroadCastReceive Actions。
十四、WIFI網(wǎng)絡(luò)的使用
1、什么是WIFI;
2、獲取WIFI網(wǎng)卡的狀態(tài);
3、操作WIFI所需要的權(quán)限;
4、改變WIFI網(wǎng)卡的狀態(tài)。
十五、Socket編程
1、什么是Socket;
2、Socket基本通信模型(見圖);
3、使用基于TCP協(xié)議的Socket;
4、使用基于UDP協(xié)議的Socket。
十六、Service
1、Service是什么;
2、Service不是什么;
3、Service的生命周期;
4、啟動和停止Service;
第四篇:Android方案總結(jié)
一、硬件描述
如上圖,應(yīng)用程序的開發(fā)過程中我們使用了飛思卡爾的i.MX51 EVK Hardware。設(shè)備提供的支持如下:多標準音頻回放;多標準視頻回放;開放的系統(tǒng)支持;
二、軟體結(jié)構(gòu)
1、Android系統(tǒng)的初始化流程圖如下所示:
BeginMkdir: /dev,/proc,/sys,/dev/pts,/dev/socketaction_for_each_trigger(“early-init”, action_add_queue_tail);property_set(ro.XXX)open_devnull_stdio():fd is 0,1,2device_initaction_for_each_trigger(“init”, action_add_queue_tail)log_init: /dev/__kmsg__property_initaction_for_each_trigger(“early-boot”, action_add_queue_tail);parse_config_file(“/init.rc”)Check have /dev/consoleaction_for_each_trigger(“boot”, action_add_queue_tail);import_kernel_cmdline: /proc/cmdlineload_565rle_image(INIT_IMAGE_FILE)queue_all_property_triggers()get_hardware_name: /proc/cpuinfoIf load okrestart_processes()Yparse_config_file(/init.%s.rc)Show Image, and Print “A N D R O I D”to ttyEnd
可以具體描述如下:(1).初始化log系統(tǒng)。
(2).解析/init.rc和/init.%hardware%.rc文件。
(3).執(zhí)行 early-init action in the two files parsed in step 2。
(4).設(shè)備初始化,例如:在 /dev 下面創(chuàng)建所有設(shè)備節(jié)點,下載 firmwares。
(5).初始化屬性服務(wù)器,Actually the property system is working as a share memory.Logically it looks like a registry under Windows system。
(6).執(zhí)行 init action in the two files parsed in step 2。
(7).開啟 屬性服務(wù)。
(8).執(zhí)行 early-boot and boot actions in the two files parsed in step 2。
(9).執(zhí)行 Execute property action in the two files parsed in step 2。
(10).進入一個無限循環(huán) to wait for device/property set/child process exit events。
2、方案基本框架,如下圖所示:
Native codeDaivik runtimeAndroidNDKappsJNIAndroidSDKappsAndroid app frameworkStandard librariesLinux kernel+Android extension
(1)圖中Native Code包含一系列運行與Linux內(nèi)核之上,由C/C++語言寫成的庫,這些庫提供基本的系統(tǒng)級功能。其為應(yīng)用層提供了本地開發(fā)的可擴展性,在此次開發(fā)過程中,Native Code主要為我們提供了音視頻的編解碼(即我們在此層開發(fā)了我們自己的音視頻的編解碼)。系統(tǒng)中主要使用的是G711音頻編解碼,實現(xiàn)語音的本地錄音及播放;FFMPEG視頻解碼,進行圖像視頻的解碼,實現(xiàn)視頻的實時播放。
(2)Dalvik runtime的相關(guān)介紹。Android系統(tǒng)的應(yīng)用開發(fā)語言是Java,而保障這一點的就是Android runtime。Java語言的運行需要有虛擬機的存在,而Android runtime 的核心就是一個稱之為Dalvik的虛擬機。另外,Android runtime還包含了一個強大的Java核心類庫。這個類庫從功能上涵蓋了傳統(tǒng)Java核心類庫的大多數(shù)功能。應(yīng)用程序調(diào)用Android 函數(shù)庫(即Android runtime中的Java核心類庫)中的函數(shù)時,其實只是調(diào)用的一個函數(shù)名,具體實現(xiàn)在Native Code中的Library中。即是Library為上層的應(yīng)用提供API供開發(fā)使用。(3)關(guān)于JNI。Java Native Interface(JNI)標準,它允許Java代碼和其他語言寫的代碼進行交互。JNI一開始是為了本地已編譯語言,尤其是C和C++而設(shè)計的,但是它并不妨礙你使用其他語言,只要調(diào)用約定受支持就可以了。我們開發(fā)的音視頻本地編解碼庫,就是通過JNI來使用的。如下,private static native void InitEnv();private static native int drawFrame(Bitmap bitmap, byte[] inbuffer, int buf_len);這是我們在程序中調(diào)用的本地函數(shù),先要使用關(guān)鍵字native進行本地聲明。static { System.loadLibrary(“decode”);}
這是用來加載我們的c動態(tài)庫的,上面的native聲明中的方法就是在我們加載的庫中具體實現(xiàn)的。
(4)Linux kernel 和Android extension部分。這一部分主要為我們提供了諸如硬件設(shè)備驅(qū)動(如display driver、camera driver等)、進程管理、內(nèi)存管理、電源管理等底層功能。這一層的Linux并不是標準的GNU/Linux,而是根據(jù)我們的商業(yè)需求進行大量的定制。
第五篇:Android面試總結(jié)
1.activity的生命周期。
activity主要生命周期的方法說明:
onCreate(Bundle savedInstanceState):創(chuàng)建activity時調(diào)用。設(shè)置在該方法中,還以Bundle的形式提供對以前儲存的任何狀態(tài)的訪問!
onStart():activity變?yōu)樵谄聊簧蠈τ脩艨梢姇r調(diào)用。
onResume():activity開始與用戶交互時調(diào)用(無論是啟動還是重新啟動一個活動,該方法總是被調(diào)用的)。
onPause():activity被暫停或收回cpu和其他資源時調(diào)用,該方法用于保存活動狀態(tài)的,也是保護現(xiàn)場,壓棧吧!
onStop():activity被停止并轉(zhuǎn)為不可見階段及后續(xù)的生命周期事件時調(diào)用。
onRestart():重新啟動activity時調(diào)用。該活動仍在棧中,而不是啟動新的活動。
onDestroy():activity被完全從系統(tǒng)內(nèi)存中移除時調(diào)用,該方法被
2.橫豎屏切換時候activity的生命周期
3.android中的動畫有哪幾類,它們的特點和區(qū)別是什么
兩種,一種是Tween動畫、還有一種是Frame動畫。Tween動畫,這種實現(xiàn)方式可以使視圖組件移動、放大、縮小以及產(chǎn)生透明度的變化;另一種Frame動畫,傳統(tǒng)的動畫方法,通過順序的播放排列好的圖片來實現(xiàn),類似電影。
{Android的animation由四種類型組成 XML中
alpha 漸變透明度動畫效果 scale漸變尺寸伸縮動畫效果
translate 畫面轉(zhuǎn)換位置移動動畫效果 rotate 畫面轉(zhuǎn)移旋轉(zhuǎn)動畫效果
JavaCode中
AlphaAnimation ScaleAnimation 漸變透明度動畫效果 漸變尺寸伸縮動畫效果
TranslateAnimation畫面轉(zhuǎn)換位置移動動畫效果 RotateAnimation 畫面轉(zhuǎn)移旋轉(zhuǎn)動畫效果
Android動畫模式
Animation主要有兩種動畫模式: 一種是tweened animation(漸變動畫)XML中 JavaCode alpha AlphaAnimation scaleScaleAnimation
一種是frame by frame(畫面轉(zhuǎn)換動畫)XML中 JavaCode translate TranslateAnimation rotate RotateAnimation
}
4.handler機制的原理:
andriod提供了 Handler 和 Looper 來滿足線程間的通信。Handler 先進先出原則。Looper類用來管理特定線程內(nèi)對象之間的消息交換(Message Exchange)。
1)Looper: 一個線程可以產(chǎn)生一個Looper對象,由它來管理此線程里的Message Queue(消息隊列)。
2)Handler: 你可以構(gòu)造Handler對象來與Looper溝通,以便push新消息到Message Queue里;或者接收Looper從Message Queue取出)所送來的消息。
3)Message Queue(消息隊列):用來存放線程放入的消息。
4)線程:UI thread 通常就是main thread,而Android啟動程序時會替它建立一個Message Queue
5.說說activity,intent,service是什么關(guān)系
[教程] 新手入門之應(yīng)用解析(Activity、Intent、Service等)
Activity, Intent, Service, IntentReceiver, ContentProvider 一般剛開始學(xué)Android時對這些基本的東西還是要明確一下的,下面的東西摘自新版android開發(fā)教程里面的,介紹比較簡單,希望能夠有幫助。
一、Activity
Activity是android中最今本的應(yīng)用程序組件,應(yīng)用程序中,一個Activity通常是一個單獨的屏幕,每一個Activity都被實現(xiàn)為一個單獨的類,這些類都是從Activity基類中繼承來的,Activity類會顯示由視圖控件組成的用戶接口,并對視圖控件的事件做出響應(yīng)。一個復(fù)雜的應(yīng)用是由多個屏幕顯示組成。這里每一個屏幕的顯示就是一個Activity,從一個屏幕的顯示到另一個新屏幕的顯示并完成相關(guān)的事件是很容易實現(xiàn)的,這些屏幕Activity是相互交互的,他們直接通信從而完成相應(yīng)的功能。當一個新的屏幕打開時,前一個屏幕將會暫停,并保存在歷史堆棧中,用戶可以從歷史堆棧中返回前一個屏幕。當屏幕不再使用時,我們可以從歷史堆棧中刪除它,默認情況下,Android會保留從主屏幕到每一個應(yīng)用的運行屏幕。Activity代表一個用戶所能看到的屏幕,Activity主要是處理一個應(yīng)用的整體性工作,如監(jiān)聽系統(tǒng)事件(按鍵、觸摸屏幕等)、為用戶顯示指定的View、啟動其他Activity等,其他的Activity繼承Activity基類后,通過重寫父類的方法來實現(xiàn)各種功能。
二、Intent
Android專有類Intent的調(diào)用是用來進行架構(gòu)屏幕之間的切換的。Intent是描述應(yīng)用想要做什么。Intent數(shù)據(jù)結(jié)構(gòu)中兩個最重要的部分是動作和動作對應(yīng)的數(shù)據(jù),典型的動作類型有:Main(活動的門戶)、View、Pick、Edit等,而動作對應(yīng)的數(shù)據(jù)是應(yīng)URI的形式進行表示的,這里的URI就相當于這些動作的ID,一個動作對應(yīng)一個動作數(shù)據(jù)。Android使用了Intent這個特殊類,實現(xiàn)在屏幕與屏幕之間的移動。Intent類用用來描述一個應(yīng)用將會做什么事情。與之有關(guān)系的一個類叫IntentFilter類,相對于intent是一個有效的做事情的請求,一個IntentFilter則用于描述一個Activity(或者IntentReceiver)能夠操作那些intent。一個Activity如果要顯示一個人的聯(lián)系方式時,需要事先聲明一個IntentFilter,這個IntentFilter要知道怎么去處理View動作和表示一個人的URI,IntentFilter需要AndroidManifest.xml中 定義,如AndroidManifest.xml中的:
通過解析各種intent,從一個屏幕導(dǎo)航到另一個屏幕是很簡單的。當向前導(dǎo)航時,activity 將會調(diào)用startActivity(IntentmyIntent)方法。然后,系統(tǒng)會在所有安裝的應(yīng)用程序中定義的IntentFilter 中查找,找到最匹配myIntent 的Intent 對應(yīng)的activity。新的activity 接收到myIntent 的通知后,開始運行。當startActivity 方法被調(diào)用將觸發(fā)解析myIntent 的動作,這個機制提供了兩個關(guān)鍵好處:
A、Activities 能夠重復(fù)利用從其它組件中以Intent 的形式產(chǎn)生的一個請求;
B、Activities 可以在任何時候被一個具有相同IntentFilter 的新的Activity 取代。
三、IntentReceiver
當你希望你的應(yīng)用能夠?qū)σ粋€外部的事件(如當電話呼入時,或者數(shù)據(jù)網(wǎng)絡(luò)可用時,或者到了晚上時)做出響應(yīng),你可以使用一個IntentReceiver。雖然IntentReceiver 在感興趣的事件發(fā)生時,會使用NotificationManage通知用戶,但它并不能生成一個UI。IntentReceiver 在AndroidManifest.xml 中注冊,但也可以在代碼中使用Context.registerReceiver()進行注冊。當一個intentreceiver 被觸發(fā)時,你的應(yīng)用不必對請求調(diào)用intentreceiver,系統(tǒng)會在需要的時候啟動你的應(yīng)用。各種應(yīng)用還可以通過使用Context.broadcastIntent()將它們自己的intentreceiver 廣播給其它應(yīng)用程序。
四、Service
一個Service 是一段長生命周期的,沒有用戶界面的程序。比較好的一個例子就是一個正在從播放列表中播放歌曲的媒體播放器。在一個媒體播放器的應(yīng)用中,應(yīng)該會有多個activity,讓使用者可以選擇歌曲并播放歌曲。然而,音樂重放這個功能并沒有對應(yīng)的activity,因為使用者當然會認為在導(dǎo)航到其它屏幕時音樂應(yīng)該還在播放的。在這個例子中,媒體播放器這個activity 會使用Context.startService()來啟動一個service,從而可以在后臺保持音樂的播放。同時,系統(tǒng)也將保持這個service 一直執(zhí)行,直到這個service 運行結(jié)束。另外,我們還可以通過使用Context.bindService()方法,連接到一個service 上(如果這個service 還沒有運行將啟動它)。當連接到一個service 之后,我們還可以service 提供的接口與它進行通訊。拿媒體播放器這個例子來說,我們還可以進行暫停、重播等操作。
五、Content Provider
Android 應(yīng)用程序能夠?qū)⑺鼈兊臄?shù)據(jù)保存到文件、SQLite 數(shù)據(jù)庫中,甚至是任何有效的設(shè)備中。當你想將你的應(yīng)用數(shù)據(jù)與其它的應(yīng)用共享時,內(nèi)容提供器就可以發(fā)揮作用了。因為內(nèi)容提供器類實現(xiàn)了一組標準的方法,從而能夠讓其它的應(yīng)用保存或讀取此內(nèi)容提供器處理的各種數(shù)據(jù)類型。數(shù)據(jù)是應(yīng)用的核心。在Android 中,默認使用鼎鼎大名的SQLite 作為系統(tǒng)DB。但是在Android 中,使用方法有點小小的不一樣。在Android 中每一個應(yīng)用都運行在各自的進程中,當你的應(yīng)用需要訪問其他應(yīng)用的數(shù)據(jù)時,也就需要數(shù)據(jù)在不同的虛擬機之間傳遞,這樣的情況操作起來可能有些困難(正常情況下,你不能讀取其他的應(yīng)用的db 文件),ContentProvider 正是用來解決在不同的應(yīng)用包之間共享數(shù)據(jù)的工具。
1、所有被一個Android 應(yīng)用程序創(chuàng)建的偏好設(shè)置,文件和數(shù)據(jù)庫都是私有的。
6.android中線程與線程,進程與進程之間如何通信
1、一個 Android 程序開始運行時,會單獨啟動一個Process。
默認情況下,所有這個程序中的Activity或者Service都會跑在這個Process。
默認情況下,一個Android程序也只有一個Process,但一個Process下卻可以有許多個
Thread。
2、一個 Android 程序開始運行時,就有一個主線程Main Thread被創(chuàng)建。該線程主要負責(zé)UI界面的顯示、更新和控件交互,所以又叫UI Thread。
一個Android程序創(chuàng)建之初,一個Process呈現(xiàn)的是單線程模型--即Main Thread,所有的任務(wù)都在一個線程中運行。所以,Main Thread所調(diào)用的每一個函數(shù),其耗時應(yīng)該越短越好。而對于比較費時的工作,應(yīng)該設(shè)法交給子線程去做,以避免阻塞主線程(主線程被阻塞,會導(dǎo)致程序假死現(xiàn)象)。
3、Android單線程模型:Android UI操作并不是線程安全的并且這些操作必須在UI線程中執(zhí)行。如果在子線程中直接修改UI,會導(dǎo)致異常。
Android中Handler、Thread(HanlderThread)、Runnable之間的關(guān)系
首先說明Android的CPU分配的最小單元是線程,Handler一般是在某個線程里創(chuàng)建的,因而Handler和Thread就是相互綁定的,一一對應(yīng)。而Runnable是一個接口,Thread是Runnable的子類。所以說,他倆都算一個進程。HandlerThread顧名思義就是可以處理消息循環(huán)的線程,他是一個擁有Looper的線程,可以處理消息循環(huán)。與其說Handler和一個線程綁定,不如說Handler是和Looper一一對應(yīng)的。最后需要說明的是,在UI線程(主線程)中: mHandler=new Handler();mHandler.post(new Runnable(){ void run(){ //執(zhí)行代碼...} });這個線程其實是在UI線程之內(nèi)運行的,并沒有新建線程。
常見的新建線程的方法是: Thread thread = new Thread();thread.start();HandlerThread thread = new HandlerThread(“string”);thread.start();
7.widget相對位置的完成在antivity的哪個生命周期階段實現(xiàn)
onStart
8.說說mvc模式的原理,它在android中的運用 : MVC(Model_view_contraller)”模型_視圖_控制器”。MVC 應(yīng)用程序總是由這三個部分組成。Event(事件)導(dǎo)致 Controller改變 Model 或View,或者同時改變兩者。只要 Controller改變了 Models 的數(shù)據(jù)或者屬性,所有依賴的 View 都會自動更新。類似的,只要 Controller改變了 View,View會從潛在的 Model 中獲取數(shù)據(jù)來刷新自己。
9.說說在android中有哪幾種數(shù)據(jù)存儲方式
在Android中,可供選擇的存儲方式有SharedPreferences、文件存儲、SQLite數(shù)據(jù)庫方式、內(nèi)容提供器(Content provider)和網(wǎng)絡(luò)
10.android中有哪幾種解析xml的類,官方推薦哪種?以及它們的原理和區(qū)別
DOM、SAX(Simple API for XML)、XmlPullParser
11.listview你是怎么優(yōu)化的。
Adapter的作用就是ListView界面與數(shù)據(jù)之間的橋梁,當列表里的每一項顯示到頁面時,都會調(diào)用Adapter的getView方法返回一個View。想過沒有? 在我們的列表有1000000項時會是什么樣的?是不是會占用極大的系統(tǒng)資源?
先看看下面的代碼:
public View getView(int position, View convertView, ViewGroup parent){
View item = mInflater.inflate(R.layout.list_item_icon_text, null);
((TextView)item.findViewById(R.id.text)).setText(DATA[position]);
((ImageView)item.findViewById(R.id.icon)).setImageBitmap((position & 1)== 1 ? mIcon1 : mIcon2);
return item;
}
怎么樣?如果超過1000000項時,后果不堪設(shè)想!您可千萬別這么寫!
我們再來看看下面的代碼:
public View getView(int position, View convertView, ViewGroup parent){
if(convertView == null){
convertView = mInflater.inflate(R.layout.item, null);
}
((TextView)convertView.findViewById(R.id.text)).setText(DATA[position]);
((ImageView)convertView.findViewById(R.id.icon)).setImageBitmap((position & 1)== 1 ? mIcon1 : mIcon2);
return convertView;
}
怎么樣,上面的代碼是不是好了很多?系統(tǒng)將會減少創(chuàng)建很多View。性能得到了很大的提升。
還有沒有優(yōu)化的方法呢? 答案是肯定的:
public View getView(int position, View convertView, ViewGroup parent){
ViewHolder holder;
if(convertView == null){
convertView = mInflater.inflate(R.layout.list_item_icon_text, null);
holder = new ViewHolder();
holder.text =(TextView)convertView.findViewById(R.id.text);
holder.icon =(ImageView)convertView.findViewById(R.id.icon);
convertView.setTag(holder);
} else {
holder =(ViewHolder)convertView.getTag();
}
holder.text.setText(DATA[position]);
holder.icon.setImageBitmap((position & 1)== 1 ? mIcon1 : mIcon2);
return convertView;
}
static class ViewHolder {
TextView text;
ImageView icon;
}
怎么樣?會不會又給您的系統(tǒng)帶來很大的提升呢?看看下面三種方式的性能對比圖您就知道了!
12.view的刷新
Android中對View的更新有很多種方式,使用時要區(qū)分不同的應(yīng)用場合。我感覺最要緊的是分清:多線程和雙緩沖的使用情況。
1.不使用多線程和雙緩沖
這種情況最簡單了,一般只是希望在View發(fā)生改變時對UI進行重繪。你只需在Activity中顯式地調(diào)用View對象中的invalidate()方法即可。系統(tǒng)會自動調(diào)用 View的onDraw()方法。
2.使用多線程和不使用雙緩沖
這種情況需要開啟新的線程,新開的線程就不好訪問View對象了。強行訪問的話會報:android.view.ViewRoot$CalledFromWrongThreadException:Only the original thread that created a view hierarchy can touch its views.這時候你需要創(chuàng)建一個繼承了android.os.Handler的子類,并重寫handleMessage(Message msg)方法。android.os.Handler是能發(fā)送和處理消息的,你需要在Activity中發(fā)出更新UI的消息,然后再你的Handler(可以使用匿名內(nèi)部類)中處理消息(因為匿名內(nèi)部類可以訪問父類變量,你可以直接調(diào)用View對象中的invalidate()方法)。也就是說:在新線程創(chuàng)建并
發(fā)送一個Message,然后再主線程中捕獲、處理該消息。
3.使用多線程和雙緩沖
Android中SurfaceView是View的子類,她同時也實現(xiàn)了雙緩沖。你可以定義一個她的子類并實現(xiàn)SurfaceHolder.Callback接口。由于實現(xiàn)SurfaceHolder.Callback接口,新線程就不需要android.os.Handler幫忙了。SurfaceHolder中l(wèi)ockCanvas()方法可以鎖定畫布,繪制玩新的圖像后調(diào)用unlockCanvasAndPost(canvas)解鎖(顯示),還是比較方便得。
13.IPC及原理
什么是Android操作系統(tǒng),所謂的Android:是基于Linux內(nèi)核的軟件平臺和操作系統(tǒng),早期由Google開發(fā),后由開放手機聯(lián)盟Open Handset Alliance)開發(fā)。
Linux系統(tǒng)中進程間通信的方式有:socket, named pipe,message queque, signal,share memory。Java系統(tǒng)中的進程間通信方式有socket, named pipe等。android應(yīng)用程序理所當然可以應(yīng)用JAVA的IPC
機制實現(xiàn)進程間的通信,取而代之的是Binder通信。Google為什么要采用這種方式呢,這取決于Binder通信方式的高效率。Binder通信是通過linux的binder driver來實現(xiàn)的。Binder通信操作類似線程遷移(thread migration),兩個進程間IPC看起來就象是一個進程進入另一個進程執(zhí)行代碼然后帶著執(zhí)行的結(jié)果返回。Binder的用戶空間為每一個進程維護著一個可用的線程池,線程池用于處理到來的IPC以及執(zhí)行進程本地消息,Binder通信是同步而不是異步。Android中的Binder通信是基于Service與Client的,所有需要IBinder通信的進程都必須創(chuàng)建一個IBinder接口。
系統(tǒng)中有一個進程管理所有的system service,Android虛擬機不允許用戶添加非授權(quán)的System service,當然現(xiàn)在源碼開發(fā)了,我們可以修改一些代碼來實現(xiàn)添加底層system Service的目的。
對用戶程序來說,我們也要創(chuàng)建server,或者Service用于進程間通信,這里有一ActivityManagerService管理JAVA應(yīng)用層所有的service創(chuàng)建與連接(connect)。disconnect,所有的 Activity也是通過這個service來啟動,加載的。ActivityManagerService也是加載在Systems Servcie中的。
Android虛擬機啟動之前系統(tǒng)會先啟動service Manager進程,service Manager打開binder驅(qū)動,并通知binder kernel驅(qū)動程序這個進程將作為System Service Manager。然后該進程將進入一個循環(huán),等待處理來自其他進程的數(shù)據(jù)。用戶創(chuàng)建一個System service后,通過defaultServiceManager得到一個
遠程ServiceManager的接口。
通過這個接口我們可以調(diào)用 addService函數(shù)將System service添加到Service Manager進程中,然后client可以通過getService獲取到需要連接的目的Service的IBinder對象。這個IBinder是 Service的BBinder在binder kernel的一個參考,所以service IBinder 在binder kernel中不會存在相同的兩個
IBinder對象。
每一個Client進程同樣需要打開Binder驅(qū)動程序。對用戶程序而言,我們獲得這個對象就可以通過binder kernel訪問service對象中的方法。Client與Service在不同的進程中,通過這種方式實現(xiàn)了類似線程間的遷移的通信方式,對用戶程序而言當調(diào)用Service返回的IBinder接口后,訪問Service中的方法就
如同調(diào)用自己的函數(shù)。實現(xiàn)接口時有幾個原則:
拋出的異常不要返回給調(diào)用者.跨進程拋異常處理是不可取的。IPC調(diào)用是同步的。如果你知道一個IPC服務(wù)需要超過幾毫秒的時間才能完成地話,你應(yīng)該避免在Activity的主線程中調(diào)用。
也就是IPC調(diào)用會掛起應(yīng)用程序?qū)е陆缑媸ロ憫?yīng).這種情況應(yīng)該考慮單起一個線程來處理,能在AIDL接口中聲明靜態(tài)屬性。IPC的調(diào)用步驟:
1.聲明一個接口類型的變量,該接口類型在.aidl文件中定義。
2.實現(xiàn)ServiceConnection。
3.調(diào)用ApplicationContext.bindService(),并在ServiceConnection實現(xiàn)中進行傳遞.4.在ServiceConnection.onServiceConnected()實現(xiàn)中,你會接收一個IBinder實例(被調(diào)用的Service).調(diào)用 YourInterfaceName.Stub.asInterface((IBinder)service)將參數(shù)轉(zhuǎn)換YourInterface類型。
5.調(diào)用接口中定義的方法。你總要檢測到DeadObjectException異常,該異常在連接斷開時被拋
出。它只會被遠程方法拋出。
6.斷開連接,調(diào)用接口實例中的ApplicationContext.unbindService()
14.Android多線程
在Android下面也有多線程的概念,在C/C++中,子線程可以是一個函數(shù),一般都是一個帶有循環(huán)的函數(shù),來處理某些數(shù)據(jù),優(yōu)先線程只是一個復(fù)雜的運算過程,所以可能不需要while循環(huán),運算完成,函數(shù)結(jié)束,線程就銷毀。對于那些需要控制的線程,一般我們都是和互斥鎖相互關(guān)聯(lián),從而來控制線程的進度,一般我們創(chuàng)建子線程,一種線程是很常見的,那就是帶有消息循環(huán)的線程。
消息循環(huán)是一個很有用的線程方式,曾經(jīng)自己用C在Linux下面實現(xiàn)一個消息循環(huán)的機制,往消息隊列里添加數(shù)據(jù),然后異步的等待消息的返回。當消息隊列為空的時候就會掛起線程,等待新的消息的加入。這是一個很通用的機制。在Android,這里的線程分為有消息循環(huán)的線程和沒有消息循環(huán)的線程,有消息循環(huán)的線程一般都會有一個Looper,這個事android的新概念。我們的主線程(UI線程)就是一個消息循環(huán)的線程。針對這種消息循環(huán)的機制,我們引入一個新的機制Handle,我們有消息循環(huán),就要往消息循環(huán)里面發(fā)送相應(yīng)的消息,自定義消息一般都會有自己對應(yīng)的處理,消息的發(fā)送和清除,消息的的處理,把這些都封裝在Handle里面,注意Handle只是針對那些有Looper的線程,不管是UI線程還是子線程,只要你有Looper,我就可以往你的消息隊列里面添加?xùn)|西,并做相應(yīng)的處理。
但是這里還有一點,就是只要是關(guān)于UI相關(guān)的東西,就不能放在子線程中,因為子線程是不能操作UI的,只能進行數(shù)據(jù)、系統(tǒng)等其他非UI的操作。
15.Android為什么要設(shè)計4大組件,他們之間的聯(lián)系,不設(shè)計行不行(主要是為了實現(xiàn)MVC模式,然而java中最難的模式也是這個,很少有產(chǎn)品能將這個模式做得很好【Technicolor 的面試官問的這個】
16,service的周期,activity的周期,談下你對Android內(nèi)部應(yīng)用的了解,比如他做電話,以及聯(lián)系人等等應(yīng)用。框架層有很多東西還是多看看,熟悉Android怎么做的,不管你做應(yīng)用程開發(fā)還是應(yīng)用框架層開發(fā)很有好處的。在就是你項目經(jīng)驗,突出你遇到什么難點,然后是怎么解決的!盡量將每個技術(shù)點凸顯出來,當然面試官有時候會為了體現(xiàn)你是否真正做過,他會問你,你在這個應(yīng)用中做那個模塊,用了多少個類之類的問題。偶爾有的面試官會問你,你用過Android自帶的單元測試了沒,怎么用的?當然我面試過很多家單位,有 的是做平板,手機,數(shù)字電視,有的是做出個erp之類的客戶端等等,出于前面的三個,基本上都是將Android的全部改掉,如果真正要做Android的話,大家要學(xué)的還很多。總之,一句話,什么樣的面試官都有,去面試的時候要做好一切心理準備,不管是技術(shù)還是基礎(chǔ)都得扎實。一個人的交談能力也很重要,總之不是非常標準的普通話,最起碼你說的得讓別人聽得懂,而且得把面試官講得非常徹底,這樣你獲得offer的機會更大,談工資也有優(yōu)勢~~當然曾經(jīng)一家公司的面試官跟我說過,技術(shù)是不惜錢的,只要你有能力,多少錢他都請。_ 確實,來北京求職期間,牛人真的很多,而且有的面試官也非常好,給了很多忠肯的意見。并不是每個面試官都特想為難你的~最主要的還是想知道你的技術(shù),因為他們也是吃公司飯,得為這個負責(zé)。
Basic:
1.基本的UI控件和布局文件
2.UI配套的Adapter的使用
3.Activity, Intent,Service,broadCast Receiver他們的生命周期管理熟悉一下
4.操作手機上的數(shù)據(jù)庫SQLite應(yīng)用
17.為什么看好 Android
對于開發(fā)人員來講:上手容易,入門簡單,api齊全,適應(yīng)性強 對于用戶來講:軟件豐富,系統(tǒng)穩(wěn)定,功能齊全 對于開發(fā)商來講:可定制性高,開發(fā)成本低,免費。
18.現(xiàn)在在公司做哪些工作(關(guān)于 Android)錯
手機軟件開發(fā)一般是分平臺的,目前比較火的是iPhone和Android手機平臺上的軟件開發(fā)。
一般大學(xué)計算機畢業(yè),都會學(xué)過相應(yīng)的編程語言,比如C或C++,有這兩種語言做為基礎(chǔ),相信你可以快速去掌握其他的編程語言。
如果你想從事iPhone平臺上的開發(fā)就要去學(xué)習(xí)Obj-C語言,想從事Android平臺上的就學(xué)習(xí)Java語言,除了掌握語言以后,還有的就是不同平臺上的開發(fā)工具。
如果你想從事手機軟件開發(fā)方面的工作的話,我建議你可以選擇一家專業(yè)的移動互聯(lián)網(wǎng)開發(fā)培訓(xùn)學(xué)校,參加專業(yè)的培訓(xùn)能幫助你更系統(tǒng)更扎實的掌握目前最先進的技術(shù)
19.Android 的框架以及一些基礎(chǔ)知識
20.Android 一些方面的領(lǐng)悟(如Android框架的 IoC特性,View System 的狀態(tài)機機制等)
21.對多線程的運用和理解,及多線程之間handle的傳值。
22.對android 虛擬機的理解,包括內(nèi)存管理機制垃圾回收機制。
23.framework工作方式及原理,Activity是如何生成一個view的,機制是什么。
24.android本身的一些限制,不如apk包大小限制,讀取大文件時的時間限制。
25.Linux中跨進程通信的集中方式
1.socket;
2.name pipe命名管道; 3.message queue消息隊列; 4.singal信號量;
5.share memory共享內(nèi)存;
26.dvm的進程和Linux的進程, 應(yīng)用程序的進程是否為同一個概念
DVM指dalivk的虛擬機。每一個Android應(yīng)用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。而每一個DVM都是在Linux 中的一個進程,所以說可以認為是同一個概念。
27.sim卡的EF 文件有何作用
sim卡的文件系統(tǒng)有自己規(guī)范,主要是為了和手機通訊,sim本 身可以有自己的操作系統(tǒng),EF就是作存儲并和手機通訊用的
28.AT命令的User case的概念
1、Use Case的作用:
我個人認為Use Case僅僅用來反映用戶需求,并且在對象分析過程中,能夠起到一個查漏補缺的作用。但是使用“先確定Use Case,再指認對象”實在是一種愚蠢的方法(恕我直言)。我個人認為,指認對象使用Yourdon在《Objuect Oriented Analysis》中提到的使用CheckList的方法在實踐中是比較實用的。我近來讀到的幾本書,也印證了我的想法。就我我個人在實踐中的經(jīng)驗,使用“首先確定Use Case”策略,非常容易導(dǎo)致分析員滑入“功能分解”的泥沼。而且從Use Case來導(dǎo)出對象將導(dǎo)致拙劣的分析模型。
2、Use Case之間的關(guān)系:
UML 1.3中,Use Case之間的關(guān)系只有3種,Generalization,Include和Extend,國內(nèi)出版的關(guān)于UML的中文書有兩本,一本是《UML從入門到精通》(其實應(yīng)該叫做Rose入門),一本是北航的《面向?qū)ο蟮目梢暬<夹g(shù)》,后一本書在這個方面起到了很壞的作用(前一本書我沒有怎么看,大概也好不到哪里去),一是使用了比較老的UML標準,比如使用了Use關(guān)系,而且對于Extend和Generalization關(guān)系的描述也很混亂,很多人受到了誤導(dǎo)(尤其是Extend關(guān)系)。我建議有條件的網(wǎng)友盡量去看英文原版的著作,比如“UML三劍客”的《Unified Modeling Language User Guide》或者直接去讀UML1.3的規(guī)范。(而且Use Case之間的關(guān)系是用虛線+箭頭表示的,直到Rose 2000對此都沒有支持)
3、Actor和Use Case之間的關(guān)系:
在UML 1.3之中,Actor和Use Case之間的關(guān)系應(yīng)該是沒有箭頭的。雖然規(guī)范中并沒有明確禁止使用箭頭,但是從字句中隱含的意義來看,應(yīng)該是沒有箭頭的,而且規(guī)范中給出的示例是沒有箭頭的。我認識的很多人,想當然的認為Actor和Use Case之間的關(guān)系上的箭頭標示信息流向或者主/被動關(guān)系,其實這個關(guān)系僅僅表示某個Actor參與了某個Use Case。
29﹑Android 手機操作系統(tǒng)的四層架構(gòu)?
架構(gòu)框架以此從上到下:
1.Applications
(應(yīng)用程序(應(yīng)用層));
Android 會同一系列核心應(yīng)用程序包一起發(fā)布,該應(yīng)用程序包包括 email 客戶端,SMS 短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理程序等。所有的應(yīng)用程序都是使用 JAVA 語 言編寫的。
2.Application FrameWork
(應(yīng)用程序擴展層(框架));
由于 Android 的手機操作系統(tǒng)是,基于 Liunx 2.6 系統(tǒng)之上封裝而成。所以開發(fā)人員可也以直接訪問核心程序所使用的API框架,該核心應(yīng)用程序的API框架設(shè)計簡化了組件的重用,任何一個核心應(yīng)用程序(模塊)都暴露出它的功能作用,并且其他應(yīng)用程序也都可以使用該核心應(yīng)用程序(模塊)的功能(不過的遵守該核心應(yīng)用程序框架的安全性限制)。同樣,該應(yīng)用程序的重用機制也使用戶方便使用應(yīng)程序的相關(guān)組件。API 框架隱藏的核心應(yīng)用程序是一系列的應(yīng)用程序的服務(wù)和系統(tǒng)應(yīng)用,其中包括如下:
(Android 手機中的 View 是最基本的一個 UI 類)豐富而又可擴展的視圖(手機界面所顯示的組件(Activity上所顯示的))組件,可以用來構(gòu)建應(yīng)用程序
如:(視圖)Views, 網(wǎng)格(grids), 文本框(text boxes), 按鈕(button), 放置圖片區(qū)(imageview),文本編輯區(qū)
(edittext), 文本顯示區(qū)(textview),3.Android RunTime Libraries
(Android 系統(tǒng)運行庫);
4.Liunx Kernel
(Android 系統(tǒng)最底層核心系統(tǒng) Liunx)
Android 的核心系統(tǒng)服務(wù)依賴于 Liunx 2.6 內(nèi)核,如系統(tǒng)安全,內(nèi)存管理,進程管理,網(wǎng)絡(luò)協(xié)議棧和驅(qū)動模型。Liunx 內(nèi)核也同時作為硬件和軟件棧之間的抽象層。
30、Android dvm的進程和 Linux 的進程, 應(yīng)用程序的進程是否為同一個概念
DVM 指 dalivk 的虛擬機。每一個 Android 應(yīng)用程序都在它自己的進程中運行,都擁有一個獨立的 Dalvik 虛擬機實例。而每一個 DVM 都是在 Linux 中的一個進程,所以說可以認為是同一個概念。
31、sim卡的 EF 文件有何作用
sim 卡的文件系統(tǒng)有自己規(guī)范,主要是為了和手機通訊,sim 本身可以有自己的操作 系統(tǒng),EF就是作存儲并和手機通訊用的
32、嵌入式操作系統(tǒng)內(nèi)存管理有哪幾種,各有何特性
頁式,段式,段頁,用到了 MMU,虛擬空間等技術(shù)
33.什么是嵌入式實時操作系統(tǒng), Android 操作系統(tǒng)屬于實時操作系統(tǒng)嗎?
嵌入式實時操作系統(tǒng)是指當外界事件或數(shù)據(jù)產(chǎn)生時,能夠接受并以足夠快的速度予以 處理,其處理的結(jié)果又能在規(guī)定的時間之內(nèi)來控制生產(chǎn)過程或?qū)μ幚硐到y(tǒng)作出快速響應(yīng),并 控制所有實時任務(wù)協(xié)調(diào)一致運行的嵌入式操作系統(tǒng)。主要用于工業(yè)控制、軍事設(shè)備、航空航天等領(lǐng)域?qū)ο到y(tǒng)的響應(yīng)時間有苛刻的要求,這就需要使用實時系統(tǒng)。又可分為軟實時和硬實時兩種,而 android 是基于 linux 內(nèi)核的,因此屬于軟實時。
34、一條最長的短信息約占多少 byte?
中文 70(包括標點),英文 160,160 個字節(jié)
1.2.3.4.5.6.7.8.9.10.11.12.13.14.什么是Activity?
請描述一下Activity生命周期。
兩個Activity之間跳轉(zhuǎn)時必然會執(zhí)行的是哪幾個方法。
橫豎屏切換時候Activity的生命周期。
如何將一個Activity設(shè)置成窗口的樣式。
你后臺的Activity被系統(tǒng) 回收怎么辦?
如何退出Activity?如何安全退出已調(diào)用多個Activity的Application?
如果后臺的Activity由于某原因被系統(tǒng)回收了,如何在被系統(tǒng)回收之前保存當前狀態(tài)?
兩個Activity之間怎么傳遞數(shù)據(jù)?
怎么讓在啟動一個Activity是就啟動一個service?
同一個程序,但不同的Activity是否可以放在不同的Task任務(wù)棧中?
Activity怎么和service綁定,怎么在activity中啟動自己對應(yīng)的service? 什么是Service以及描述下它的生命周期。
Service有哪些啟動方法,有什么區(qū)別,怎樣停用Service?
15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.不用service,B頁面為音樂播放,從A跳轉(zhuǎn)到B,再返回,如何使音樂繼續(xù)播放?
什么是IntentService?有何優(yōu)點? 什么時候使用Service?
請描述一下Intent 和 Intent Filter。Intent傳遞數(shù)據(jù)時,可以傳遞哪些類型數(shù)據(jù)? 說說Activity,Intent,Service是什么關(guān)系。請描述一下Broadcast Receiver。
在manifest和代碼中如何注冊和使 用 broadcast receiver。請介紹下ContentProvider是如何實現(xiàn)數(shù)據(jù)共享的。請介紹下Android的數(shù)據(jù)存儲方式。
為什么要用ContentProvider?它和sql的實現(xiàn)上有什么差別? 請介紹下Android中常用的五種布局。
談?wù)刄I中,Padding和Margin有什么區(qū)別?
widget相對位置的完成在antivity的哪個生命周期階段實現(xiàn)。
請解釋下在單線程模型中Message、Handler、Message Queue、Looper之間的關(guān)系。AIDL的全稱是什么?如何工作?能處理哪些類型的數(shù)據(jù)?
請解釋下Android程序運行時權(quán)限與文件系統(tǒng)權(quán)限的區(qū)別。
系統(tǒng)上安裝了多種瀏覽器,能否指定某瀏覽器訪問指定頁面?
對多線程的運用和理解,及多線程之間handle的傳值。對android虛擬機的理解,包括內(nèi)存管理機制垃圾回收機制。
Framework工作方式及原理,Activity是如何生成一個view的,機制是什么。android本身的一些限制,比如apk包大小限制,讀取大文件時的時間限。如何加載的音樂信息,如何改善其效率。
ListView如何提高其效率?
啟動應(yīng)用后,改變系統(tǒng)語言,應(yīng)用的語言會改變么?
啟動一個程序,可以主界面點擊圖標進入,也可以從一個程序中跳轉(zhuǎn)過去,二者有什么區(qū)別?
Android程序與Java程序的區(qū)別?
Android中Task任務(wù)棧的分配。
在Android中,怎么節(jié)省內(nèi)存的使用,怎么主動回收內(nèi)存?
不同工程中的方法是否可以相互調(diào)用?
在Android中是如何實現(xiàn)判斷區(qū)分通話記錄中的電話狀態(tài),去電,來電、未接來電?
dvm的進程和Linux的進程, 應(yīng)用程序的進程是否為同一個概念
sim卡的EF 文件有何作用
如何判斷是否有SD卡?
嵌入式操作系統(tǒng)內(nèi)存管理有哪幾種,各有何特性。
什么是嵌入式實時操作系統(tǒng), Android 操作系統(tǒng)屬于實時操作系統(tǒng)嗎? 一條最長的短信息約占多少byte? Linux中跨進程通信的幾種方式。談?wù)剬ndroid NDK的理解。
談?wù)凙ndroid的優(yōu)點和不足之處。
Android系統(tǒng)中GC什么情況下會出現(xiàn)內(nèi)存泄露呢? Android UI中的View如何刷新。簡單描述下Android 數(shù)字簽名。什么是ANR 如何避免它?
59.60.61.62.63.64.65.66.android中的動畫有哪幾類,它們的特點和區(qū)別是什么?
handler機制的原理。
android中線程與線程,進程與進程之間如何通信。
說說mvc模式的原理,它在android中的運用。
android中有哪幾種解析xml的類,官方推薦哪種?以及它們的原理和區(qū)別。
DDMS與TraceView的區(qū)別? res目錄有默認幾項resource。android的哪個版本是一次重大的升級?