第一篇:1Android筆試總結(答案全)
筆試,共10道題,不限時間。(答案整理自互聯網,不保證完全正確,僅供參考。)
1.請談一下Android系統的架構。
答:Android系統采用了分層架構,從高層到低層分別是應用程序層、應用程序框架層、系統運行庫層和linux核心層。
2.談談android大眾常用的五種布局。
答:在Android中,共有五種布局方式,分別是:FrameLayout(框架布局),LinearLayout(線性布局),AbsoluteLayout(絕對布局),RelativeLayout(相對布局),TableLayout(表格布局)。
(1)FrameLayout 框架布局,放入其中的所有元素都被放置在最左上的區域,而且無法為這些元素指定一個確切的位置,下一個子元素會重疊覆蓋上一個子元素,適合瀏覽單張圖片。(2)LinearLayout 線性布局,是應用程序中最常用的布局方式,主要提供控件水平或者垂直排列的模型,每個子組件都是以垂直或水平的方式來定位.(默認是垂直)(3)AbsoluteLayout 絕對定位布局,采用坐標軸的方式定位組件,左上角是(0,0)點,往右x軸遞增,往下Y軸遞增,組件定位屬性為android:layout_x 和 android:layout_y來確定坐標。
(4)RelativeLayout 相對布局,根據另外一個組件或是頂層父組件來確定下一個組件的位置。和CSS里面的類似。
(5)TableLayout 表格布局,類似Html里的Table.使用TableRow來布局,其中TableRow代表一行,TableRow的每一個視圖組件代表一個單元格。
3.談談android數據存儲方式。
答:Android提供了5種方式存儲數據:
(1)使用SharedPreferences存儲數據;它是Android提供的用來存儲一些簡單配置信息的一種機制,采用了XML格式將數據存儲到設備中。只能在同一個包內使用,不能在不同的包之間使用。
(2)文件存儲數據;文件存儲方式是一種較常用的方法,在Android中讀取/寫入文件的方法,與Java中實現I/O的程序是完全一樣的,提供了openFileInput()和openFileOutput()方法來讀取設備上的文件。
(3)SQLite數據庫存儲數據;SQLite是Android所帶的一個標準的數據庫,它支持SQL語句,它是一個輕量級的嵌入式數據庫。
(4)使用ContentProvider存儲數據;主要用于應用程序之間進行數據交換,從而能夠讓其他的應用保存或讀取此Content Provider的各種數據類型。(5)網絡存儲數據;通過網絡上提供給我們的存儲空間來上傳(存儲)和下載(獲取)我們存儲在網絡空間中的數據信息。
4.Android中Activity, Intent, Content Provider, Service各有什么區別。答:Activity: 活動,是最基本的android應用程序組件。一個活動就是一個單獨的屏幕,每一個活動都被實現為一個獨立的類,并且從活動基類繼承而來。Intent: 意圖,描述應用想干什么。最重要的部分是動作和動作對應的數據。
Content Provider:內容提供器,android應用程序能夠將它們的數據保存到文件、SQLite數據庫中,甚至是任何有效的設備中。當你想將你的應用數據和其他應用共享時,內容提供器就可以發揮作用了。
Service:服務,具有一段較長生命周期且沒有用戶界面的程序。
5.View, surfaceView, GLSurfaceView有什么區別。
答:view是最基礎的,必須在UI主線程內更新畫面,速度較慢。
SurfaceView 是view的子類,類似使用雙緩機制,在新的線程中更新畫面所以刷新界面速度比view快
GLSurfaceView 是SurfaceView的子類,opengl 專用的
6.Adapter有什么作用?常見的Adapter有哪些?
答:Adapter是連接后端數據和前端顯示的適配器接口。常見的Adapter有ArrayAdapter, BaseAdapter, CursorAdapter, HeaderViewListAdapter, ListAdapter, ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter, SpinnerAdapter, WrapperListAdapter等
7.Manifest.xml文件中主要包括哪些信息?
答:manifest:根節點,描述了package中所有的內容。
uses-permission:請求你的package正常運作所需賦予的安全許可。
permission: 聲明了安全許可來限制哪些程序能你package中的組件和功能。instrumentation:聲明了用來測試此package或其他package指令組件的代碼。application:包含package中application級別組件聲明的根節點。activity:Activity是用來與用戶交互的主要工具。
receiver:IntentReceiver能使的application獲得數據的改變或者發生的操作,即使它當前不在運行。
service:Service是能在后臺運行任意時間的組件。
provider:ContentProvider是用來管理持久化數據并發布給其他應用程序使用的組件。
8.請寫一段代碼(SAX, DOM, 或者pull)來解析XML文檔。答:下面是要解析的XML文件:
定義一個名為Person的javaBean用于存放上面解析出來的xml內容
public class Person { private Integer id;private String name;private Short age;
public Integer getId(){ return id;}
public void setId(Integer id){ this.id = id;}
public String getName(){ return name;}
public void setName(String name){ this.name = name;}
public Short getAge(){ return age;}
public void setAge(Short age){ this.age = age;} }(1)使用SAX讀取XML文件;它采用的是事件驅動,并不需要解析完整個文檔,速度快并且占用內存少。需要為SAX提供實現ContentHandler接口的類。PersonDefaultHandler.java import java.util.ArrayList;import java.util.List;
import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;
import com.sinber.domain.Person;
public class PersonDefaultHandler extends DefaultHandler { private List
persons;private Person person;//記錄當前person
private String perTag;//記錄前一個標簽的名稱
/** * 重寫父類的開始文檔方法。用于初始化 */
@Override public void startDocument()throws SAXException { persons = new ArrayList
();}
@Override public void startElement(String uri, String localName, String qName, Attributes attributes)throws SAXException { if(“person”.equals(localName)){ Integer id = new Integer(attributes.getValue(0));//取id person = new Person();person.setId(id);} perTag = localName;}
/**參數:
* ch 整個XML字符串
* start 節點值在整個XML字符串中的索引位置 * length 節點值的長度 */
@Override public void characters(char[] ch, int start, int length)throws SAXException { if(perTag!=null){ String data = new String(ch,start,length);if(“name”.equals(perTag)){ person.setName(data);}else if(“age”.equals(perTag)){ person.setAge(new Short(data));} } }
@Override public void endElement(String uri, String localName, String qName)throws SAXException { if(“person”.equals(localName)){
persons.add(person);person = null;} perTag = null;}
public List
getPersons(){ return persons;} } SAXPerson.java import java.io.InputStream;import java.util.List;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import com.sinber.domain.Person;public class SAXPerson{ public static List
getPerson()throws Exception{ //通過類裝載器獲取文件 InputStream inStream = SAXPersonService.class.getClassLoader().getResourceAsStream(“person.xml”);SAXParserFactory factory = SAXParserFactory.newInstance();SAXParser saxParser = factory.newSAXParser();PersonDefaultHandler handler = new PersonDefaultHandler();saxParser.parse(inStream, handler);inStream.close();
return handler.getPersons();} }
(2)DOM解析XML文件時,會將XML文件的所有內容讀取到內存中,然后允許您使用DOM API遍歷XML樹、檢索所需的數據。DOMPerson.java
import java.io.InputStream;import java.util.ArrayList;import java.util.List;
import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Element;
import org.w3c.dom.Node;import org.w3c.dom.NodeList;import com.sinber.domain.Person;public class DOMPerson { public static List
getPerson()throws Exception{ List
pers = new ArrayList
();InputStream inStream = SAXPersonService.class.getClassLoader().getResourceAsStream(“person.xml”);DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document dom = builder.parse(inStream);Element root = dom.getDocumentElement();NodeList persons = root.getElementsByTagName(“person”);for(int i=0;i
String(element.getFirstChild().getNodeValue()));}else if(“age”.equals(childNode.getNodeName())){ person.setAge(new
Short(element.getFirstChild().getNodeValue()));} } } pers.add(person);} inStream.close();return pers;} }(3)使用Pull解析器讀取XML文件 PullPerson.java import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;
import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlSerializer;import android.os.Environment;import android.util.Xml;import com.sinber.domain.Person;public class PullPerson {
public static void save(List
persons)throws Exception{ XmlSerializer serializer = Xml.newSerializer();File file = new
File(Environment.getExternalStorageDirectory(),“person.xml”);FileOutputStream outStream = new FileOutputStream(file);serializer.setOutput(outStream,“UTF-8”);serializer.startDocument(“UTF-8”, true);serializer.startTag(“", ”persons“);for(Person person:persons){ serializer.startTag(”“, ”person“);//person serializer.attribute(”“, ”id“, ”“+person.getId());serializer.startTag(”“, ”name“);//name serializer.text(person.getName());serializer.endTag(”“, ”name“);//name serializer.startTag(”“, ”age“);//age serializer.text(person.getAge().toString());serializer.endTag(”“, ”age“);//age
serializer.endTag(”“, ”person“);//person } serializer.endTag(”“, ”persons“);serializer.endDocument();outStream.close();}
public static List
getPersons()throws Exception{ List
persons = null;Person person = null;XmlPullParser parser= Xml.newPullParser();InputStream inStream = PullPersonService.class.getClassLoader().getResourceAsStream(”person.xml“);parser.setInput(inStream, ”UTF-8“);int eventType = parser.getEventType();//觸發第一個事件
while(eventType!=XmlPullParser.END_DOCUMENT){
switch(eventType){ case XmlPullParser.START_DOCUMENT: persons = new ArrayList
();break;
case XmlPullParser.START_TAG: //開始元素事件
if(”person“.equals(parser.getName())){ person = new Person();person.setId(new Integer(parser.getAttributeValue(0)));}else if(person!=null){ if(”name“.equals(parser.getName())){ person.setName(parser.nextText());}else if(”age“.equals(parser.getName())){ person.setAge(new Short(parser.nextText()));} } break;
case XmlPullParser.END_TAG: //結束元素事件
if(”person".equals(parser.getName())){ persons.add(person);person = null;} break;
default: break;} eventType = parser.next();} return persons;} } 以上三種方式任選其一即可。
9.根據自己的理解描述下Android數字簽名。
答:(1)所有的應用程序都必須有數字證書,Android系統不會安裝一個沒有數字證書的應用程序
(2)Android程序包使用的數字證書可以是自簽名的,不需要一個權威的數字證書機構簽名認證
(3)如果要正式發布一個Android,必須使用一個合適的私鑰生成的數字證書來給程序簽名,而不能使用adt插件或者ant工具生成的調試證書來發布。(4)數字證書都是有有效期的,Android只是在應用程序安裝的時候才會檢查證
書的有效期。如果程序已經安裝在系統中,即使證書過期也不會影響程序的正常功能。
10.已知單鏈表的頭結構head,寫一個函數把這個鏈表逆序。答: 如下所示 Node.java public class Node { private Integer count;private Node nextNode;
public Node(){ } public Node(int count){ this.count = new Integer(count);} public Integer getCount(){ return count;} public void setCount(Integer count){ this.count = count;} public Node getNextNode(){ return nextNode;} public void setNextNode(Node nextNode){ this.nextNode = nextNode;} } ReverseSingleLink.java public class ReverseSingleLink { public static Node revSingleLink(Node head){ if(head == null){ //鏈表為空不能逆序
return head;} if(head.getNextNode()==null){ //如果只有一個結點,當然逆過來也是同一個
return head;} Node rhead = revSingleLink(head.getNextNode());head.getNextNode().setNextNode(head);head.setNextNode(null);return rhead;}
public static void main(String[] args){ Node head = new Node(0);Node temp1 = null,temp2 = null;for(int i=1;i<100;i++){ temp1 = new Node(i);if(i==1){ head.setNextNode(temp1);}else{ temp2.setNextNode(temp1);} temp2 = temp1;} head = revSingleLink(head);while(head!=null){ head = head.getNextNode();} } }
第二篇:中國移動筆試(答案全)
中國移動筆試題集
一、填空
1:中國移動三大品牌是哪個______,_____,______,其口號分別為____,______,______.未來在我手中--全球通,我的地盤聽我的--動感地帶,輕松有我---神州行
2:中國六大運營商分別為中國移動,_____,______,______,_____,______,______.中國移動,中國聯通,中國電信,中國網通,中國鐵通和中國衛通
3:白日依山盡,黃河入海流,_____,______.此詩為著名詩人_____所著。
欲窮千里目,更上一層樓
王之渙
4:用加減乘除使得給出的4個數字得出以下答案:24。
(一)5,6,7,8;
(二)3,3,8,8
二:問答
1:用十種方法向和尚推銷梳子,請自圓其說
2:有兩個桶,一個三斤,一個五斤,水無限,如何得出精確的四斤水
3:三筐蘋果,一筐全紅色,一筐全綠色,一筐紅綠混雜,蘋果筐子上分別貼了三張假標簽(例如:若帖“紅蘋果”標簽的筐子里裝的一定不是全紅色的,有可能為綠或混合)。請問如何在只拿出一只蘋果的情況下得出三筐蘋果的實際顏色 答:選擇
4:夜晚過一橋,甲過需要一分鐘,乙兩分鐘,丙五分鐘,丁十分鐘。橋一次最多只能承受兩人,過橋必須使用手電筒,現在只有一只手電筒。請問4人如何在17分鐘內全部過橋
5:如何用一句最經典的話來批評犯錯的美麗女性
6:顧客永遠是對的嘛?
7:你為什么想進入本公司,你有何優缺點?(可以用漢或英語,只能選其中一種)
8:一個董事會有10個人,近視6個,50歲以上7個,大學生8個,結婚的9個,男性10個。如果滿足所有條件的最多有6個。那么最少有幾個?
答 :最少0個人全滿足要求,即沒有人全滿足條件
10個人中 全部滿足是“男性”的條件
9個人已婚
1人未婚(此人已滿足不符合全部條件的要求)
剩下只要使目前滿足要求的9人中符合條件的人越少越好
則令8個大學生中 7個符合9人已婚的條件 一個符合未婚的條件 則不滿足全部條件的人又多了2個 累計3個
令7個50歲以上的 3個是以上累計3人中的 則這7人中還有4人滿足目前的全部條件
令6個近視的 全部為除去那4個滿足累計到上一步條件之外的六人 則這四個人也不能滿足全部條件
即可使10個人都不能達到全部條件
9、玩一個容器裝豆子,每秒裝入的豆子是前一秒的翻倍,1分鐘后能裝滿,問裝滿容器的1/8,用多少時間?
10、三個甲零件和三個乙零件混合,兩兩放入三個分別貼著“甲甲”、“乙乙”、“甲乙”標簽的瓶子里。標簽和瓶子里的實際零件名都不符合。問:要是選擇一個瓶子,只能拿出該瓶子里的一個零件識別,問拿哪一個,就能知道所有瓶子內的所有零件的組合? 答:拿“甲乙”的瓶子
若掏出的是甲 說明這瓶是甲甲 標著“甲甲”的是乙乙 標著“乙乙”的是甲乙
若掏出的是乙 說明這瓶是乙乙 標著“甲甲”的是甲乙 標著“乙乙”的是甲甲
11、一個長寬高16米、12米、8米的倉庫,能放多少個長寬高4市寸、3市寸、2市寸的物品? 1米=30市寸
倉庫尺寸:480市寸*360市寸*240市寸
(4*120)*(3*120)*(2*120)
也就是長寬高都是120倍的關系
12、面積相同的正五邊形、正方形、圓、正三角形,周長最大和最小的分別是?(三角形,圓)
13、質量、長度都不知道的一個天平式重量秤,平衡時,左右秤桿不一樣長,現有兩個500g砝碼,問是否可以準確稱出1市斤(斤:500g)的白糖?
14、一個公司調查,選擇10名員工,其中吸煙的6個,本科學歷的7個,大于50歲的八個,高級職稱的9個,男性的10個,如果符合全部條件的人最多是6個,那么最少是幾個?0個 同8
15、有26個小球!其中一個球比其他球稍微重一點,給你一個天平,只有稱三次機會,問怎樣將這個小球找出來 答:分三組,9個9個8個
稱量9個的兩組,若是一樣重,則那個小球在八個那組;若是有一組稍重,那小球就在稍重一組。將找出的一組拿出六個,分別兩邊放三個稱量,若是一樣重,則那個小球在剩下的里面;若是有一組稍重,那小球就在稍重一組。最后剩三個或者兩個,再用同樣的方法進行鑒別。
部分題回答: 一 填空
4、(5+7)*(8-6)=24 6*(5+7-8)=24 [6÷(7-5)]×8=24;8÷(7-5)×6=24 8÷(3-8÷3)=24 二 問答:
1.推銷梳子的故事
有一個單位招聘業務員,由于公司待遇很好,所以很多人面試。經理為了考驗大家就出了一個題目:讓他們用一天的時間去推銷梳子,向和尚推銷。很多人都說這不可能的,和尚是沒有頭發的,怎么可能向他們推銷?于是很多人就放棄了這個機會。但是有三個人愿意試試。第三天,他們回來了。
第一個人賣了1把梳子,他對經理說:“我看到一個小和尚,頭上生了很多虱子,很癢,在那里用手抓。我就騙他說抓頭用梳子抓,于是我就賣出了一把。”
第二個人賣了10把梳子。他對經理說:“我找到廟里的主持,對他說如果上山禮佛的人的頭發被山風吹亂了,就表示對佛不尊敬,是一種罪過,假如在每個佛像前擺一把梳子,游客來了梳完頭再拜佛就更好!于是我賣了10把梳子。”
第三個人賣了3000把梳子!他對經理說:“我到了最大的寺廟里,直接跟方丈講,你想不想增加收入?方丈說想。我就告訴他,在寺廟最繁華的地方貼上標語,捐錢有禮物拿。什么禮物呢,一把功德梳。這個梳子有個特點,一定要在人多的地方梳頭,這樣就能梳去晦氣梳來運氣。于是很多人捐錢后就梳頭又使很多人去捐錢。一下子就賣出了3000把。”
說明:在溝通時,我們要找到對方的需求并給予解決,只有增加了對方的價值,才能達成自己的期望。2、5斤桶取滿倒入3斤桶 然后 3斤桶的 水倒掉,然后 5斤桶剩了2斤在倒入3斤桶,然后 5斤桶在取滿 此時 3斤桶中有2斤水,5斤桶把3斤桶倒滿 此時 5斤桶就是4斤水。
3、選擇貼有“混合”的蘋果那筐
取出的是紅色蘋果,說明此筐蘋果為全紅色蘋果,那么貼有“全紅色”的是全綠色,貼有“全綠色”的是混合。取出的是綠色蘋果,說明此筐蘋果為全綠色蘋果,那么貼有“全紅色”的是混合色,貼有“全綠色”的是紅色。
4、甲乙過橋 甲回 丙丁過橋 乙回 甲乙一起過橋。
5、這是一個美麗的錯誤。
6、客戶永遠是對的 錯了也是對。9、57秒
15、解決此類問題方法:類似這樣的問題一般不容易正向推出結果 即:不要先盲目地稱這26個球,這樣成功的幾率不是很大(遍歷的次數太多),而是應該考慮:如果只稱一次就能找出重球的情況中 最多原始球應該有幾個?
即: 原始球有3個(如果原始球是4個 稱一次是不能找到重球的,原始球是兩個或一個一定能 但不是最多的原始球)所以問題應該圍繞3進行研究,來逆向推理:
3×3 = 9
9×3=27 26 =9+9+(9-1)
所以即使是原始球有27個我們也一定能做出來,何況是26個
我認為此題就是怕答題人想到27 = 9+ 9+ 9 所以才弄個26 來故意讓答題者想不出26=9+9+8 的分法
第三篇:Android總結
Android四大組件:
Activity—表現屏幕界面
Service—后臺服務
BroadcastReceiver—實現廣播機制
ContentProvider—實現數據存儲
Intent類:用來啟動程序并傳遞信息的類
用于Activity、Receiver、Service之間進行交互的類,通過無參構造方法創建對象,增加其action、category、data、extra等屬性進行信息傳遞,并通過Activity中的startActivity(Intent intent)進行界面的跳轉;通過Context中的StartService(Intent intent)進行服務跳轉;通過Context中的registerReceive(Intent intent)對廣播進行注冊,并通過sendBroadcast()進行無序消息發送,或可以通過SendOrderedBroadcast()進行有序的消息發送。Handler類:
用來發送和處理消息,并配合主線程完成UI的更新;消息Message/Runnable傳遞通過MessageQueue(消息隊列,先進先出)進行傳遞,并通過Lopper進行接收,傳遞的消息可以為Message對象,也可以是Runnable對象;接收方法通過HandleMessage(Message msg)進行獲取。SharedPreferences類:
一般用于第一次登錄時的設置,或者是各個界面的一些小型格式設置,如字體等。是本地的小型共享數據庫,可以通過Context的靜態方法getSharedPreferences獲得其對象,對象內的值均為鍵值對進行儲存。通過SharedPreferences對象調用editor()獲取SharedPreferences.Editor對象,向共享數據庫中增加數據,putString(),并提交數據,commit();通過SharedPreferences對象獲取共享數據庫中的數據,getString()。
ViewPager:實現界面滑動的類;
通過設置OnPagerChangedListener設置ViewPager的監聽事件;
實現流程:
①布局文件中設置ViewPager控件;
②代碼中進行綁定控件;
③通過繼承PagerAdapter抽象類進行設置適配器,并傳遞數據源;
④適配器中實現兩個抽象方法,兩個重寫方法:getCount()—獲取滑動界面的數量,isViewFromObject()—判斷視圖是否是來自于Object文件中;重寫兩個方法,分別為destoryItem—銷毀指定位置的視圖;InstantiateItem(),設置指定位置的視圖;
Timer與TimerTask類:
Timer為計時器的類,通過無參構造方法可以獲取對象,通過Timer.schedule(TimerTask task,long time)進行設置多久后執行某任務,當任務執行完后,取消計時的功能,Timer.cancle();TimerTask類為抽象類,實例化時,必須重寫run方法;執行的內容,均在run方法中進行設置,并且執行時,已在子線程中進行執行。自定義View:用到的類有Paint、Canvas、Spec、SpecF、Path、View.MeasureSpec、Timer、TimerTask;
抽象類,通過子類繼承,獲取對象;在布局文件中綁定后,通過代碼,設置自定義View的屬性;自定義View中,通過重寫OnMeasure方法,對布局文件中的尺寸進行測量,并由View中的setMeasureDimenson()方法,進行數據的保存;通過重寫Ondraw方法,進行繪圖;當需要繪制動態圖形時,使用計時器Timer的schedule(TimerTask,long time,delay time2)方法,在time時間后,每隔time2時間,重寫執行run方法中的內容;將耗時的操作設置在run方法中,并通過View中的invalidate()方法刷新主線程中的繪的圖形,通過postInvalidate()刷新子線程中的圖形。數據庫:
常用的數據庫有Oracle,需要安裝和配置的大型收費數據庫;MySQL是中型數據庫,同樣需要安裝配置,但不需要收費;Sqlite是小型免費的嵌入式數據庫,占用內存低,最新版本為3.0。Sqlite數據庫需要通過SqliteDatabaseOpenHelper進行創建數據庫,并通過SqliteDatabase進行數據庫的操作。輔助類是抽象類,通過繼承,重寫兩個方法,并在子類的構造方法中通過OpenHelper的構造方法(Context context,String SqlName,SqliteDatabase.CursorFactory factory,int version)進行數據庫的創建,在onCreate方法中,進行數據庫表的創建,在onUpdate中進行數據庫的版本更新。在數據庫的操作類中,執行exect方法,通過sql語句對數據庫進行操作。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適配器的優化:
將布局文件中的控件進行封裝,當視圖加載時,判斷可變視圖是否存在,當不存在時,通過布局文件獲取視圖,并新建封裝類,將地址通過setTag()進行發送;當視圖存在時,重復利用地址—getTag()。反射:
存儲數據的方式:
共享數據庫、數據庫、文件、網絡、內容提供者
廣播:
廣播傳播時,需要接收者、發送者、廣播頻道;根據發送者的發送方式不同,分為有序廣播、無序廣播;有序廣播為接收者有接收順序,根據設置的優先級不同,確定先后順序,接收者同時也是發送者,向后面的廣播發送消息,發送過程中,可以添加信息,也可以停止廣播的傳輸;無序廣播,接收者之間無聯系,均從發送者處接收信息;廣播在傳輸過程中,不能被添加信息,也不可能被停止。廣播在發送前,需要對接收者進行注冊,注冊方式有兩種,動態注冊、靜態注冊。動態注冊,是在代碼中進行,通過Context對象調用靜態方法進行注冊,所有的廣播均可以用動態注冊,其生命周期依賴于應用,相對于靜態注冊,比較節省內存;靜態方法在清單文件中進行注冊,部分系統廣播不能通過靜態注冊進行,其生命周期依賴于系統,當系統啟動,即運行接收廣播,較耗內存。廣播接收者需要繼承BroadcastReceiver,并實現抽象方法onReceive(),通過回調接口,進行數據的傳輸。注意:廣播發送前,必須進行接收者的注冊,并且,當顯示跳轉時,不需要意圖過濾器。安卓布局:九種布局
線性布局,水平或垂直方向兩種格式,主要特點為權重,即規定各控件在視圖中的占有的比例;
相對布局,相對于父控件或兄弟控件的布局,各控件需指定相對位置; 絕對布局,指定各控件在視圖中的絕對位置,幾乎不再使用; 表格布局,子布局放在行中,列由控件表示(TableRow); 幀布局:覆蓋前面布局的布局,一般用于暫停按鈕等; 風格布局:可以跨行、跨列的布局,占滿換行;
左右側滑:可以實現左右側滑,通過設置主菜單和二級菜單設置左右兩個菜單; 下拉刷新:設置下拉刷新、上拉加載的功能; 抽屜布局;
安卓版本及對應的API:
1.6—4;2—7;3—11;4—15;4.3—18;5—20;5.1—21;6—23;7—25; 安卓四層架構:
應用層:Java語言開發,主要從事App開發;
運行庫層:Java語言與C語言,View視圖、管理類等的開發; 架構層:C語言與Linux語言,各種框架、瀏覽器等; 內核層:Linux、C語言,開發各種驅動; 安卓四大組件:
Activity:界面,實現程序與用戶之間的交換,有自己的生命周期,七個生命周期;4種啟動模式 Service:
BroadcastReceive:三要素,發送者、接收者、發送頻道(Intent);類型:有序(接收有序,有數據傳送,可以攔截數據)、無序廣播(相對);注冊方式:靜態注冊,持久監聽,占用內存比較高生命周期跟隨系統,動態注冊(代碼中),所有廣播都可以動態注冊,部分系統廣播不能動態注冊,臨時監聽,占用內存較少,生命周期隨應用進行;
ContentProvide:不能存放數據,五種存放數據方式之一,特點為:①為數據的獲取等操作添加一個統一的接口②可以實現跨應用訪問數據;③可以實現Android中通訊錄、消息、音頻、視頻等的訪問或操作;通過ContentReceive進行數據的訪問,可以對數據進行增刪改查操作。
動畫: IO流: 序列化: AlertDialog:
Set實現類: 手機電量檢測:
自定義SurfaceView:
自定義View:三個構造方法的區別
Message:Handler.obtain/new/Message.obtain
HttpUriConnection訪問網絡
gride 異步任務 動畫
抽象類和接口 反射 克隆 序列化 側滑的實現 數據庫 Socket:
Gson解析
異步任務和子線程區別 WebView 版本更新 照片的圓角化
Collection與Collections Sql語句
MVP框架與MVC: TCP與UDP的區別: 一鍵分享的流程: Http協議的理解: 不使用框架訪問網絡: List集合與set集合: 自定義View的流程: 線性布局的特點: ViewPager的原理: 服務的啟動方式:
Activity的啟動方式: Xml數據解析:
第四篇:Android WebView總結
Android WebView總結
1、添加權限:AndroidManifest.xml中必須使用許可“Android.permission.INTERNET”,否則會出web page not available錯誤。
2、在要Activity中生成一個WebView組件:WebView webView = new WebView(this);
3、設置WebView基本信息:
如果訪問的頁面中有Javascript,則webview必須設置支持Javascript。
webview.getSettings().setJavaScriptEnabled(true);
觸摸焦點起作用
requestFocus();
取消滾動條
this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);
4、設置WevView要顯示的網頁:
互聯網用:webView.loadUrl("");本地文件存放在:assets文件中
5、如果希望點擊鏈接由自己處理,而不是新開Android的系統browser中響應該鏈接。給WebView添加一個事件監聽對象(WebViewClient)
并重寫其中的一些方法
shouldOverrideUrlLoading:對網頁中超鏈接按鈕的響應。
當按下某個連接時WebViewClient會調用這個方法,并傳遞參數:按下的url
onLoadResource
onPageStart
onPageFinish
onReceiveError
onReceivedHttpAuthRequest6、如果用webview點鏈接看了很多頁以后,如果不做任何處理,點擊系統“Back”鍵,整個瀏覽器會調用finish()而結束自身,如果希望瀏覽的網頁回退而不是退出瀏覽器,需要在當前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 課程總結
一、Android開發環境的搭建。
1、Android SDK的安裝;
2、ADT的安裝和配置;
3、Android 模擬器的配置。
二、編寫第一個Android程序───Hello World(1學時)
1、創建一個Android應用程序的步驟;
2、Android 應用程序目錄結構;
3、AndroidManidest.xml文件的作用;
4、Android相關資源文件的作用。
三、Activity及Activity和Intent(2學時)
1、Activity的主要作用;
2、創建一個Activity的方法;
3、在AndroidManifest.xml文件中的注冊應用Activity的方法;
4、在Activity中添加控件的方法;
5、多個Activity之間的切換;
6、Intent的基本作用;
7、在一個Activity中啟動另一個Activity的方法;
8、使用Intent在Activity中傳遞數據的基本方法。
四、常見控件的使用方法(基礎)
1、TextView的使用方法;
2、EditText的使用方法;
3、Button的使用方法;
4、Menu的使用方法。
五、Activity的生命周期(2學時)
1、Activity的七個周期:
① OnCreate();② OnDestroy();③ OnPause();④ OnRestart();⑤ OnResume();⑥ OnStart();⑦ OnStop();
2、Task的基本概念;
3、Activity和Task之間的關系;
4、對話框風格的Activity的使用方法。
六、Activity的布局(3學時)
1、LinearLayout的使用方法;
2、TableLayout的使用方法;
3、LinearLayout和TableLayout的嵌套使用;
4、RelativeLayout的使用方法(重點、難點)
七、常用控件是使用方法二(2學時)
1、RadioGroup和RadioButton的使用方法;
2、CheckBox的使用方法;
3、Toast的基本用法。
4、ProgressBar的使用方法;
5、ListView的用法。
八、Handler的使用方法(2學時)
1、Handler的基本概念;
2、Handler的基本用法;
3、使用Handler更新ProgressBar
4、Handler與線程;
5、Bundle的用法;
6、在新線程中處理消息的方法。
九、SQLite使用方法
1、SQLite介紹;
2、SQLiteOpenHeper使用方法;
3、使用adb訪問SQLite
4、增、刪、改、查。
十、Android文件下載
1、使用HTTP協議下載文件;
2、將下載的文件寫入SDCARD。
十一、Content Provider初步(2學時)
1、Content Provider的基本概念;
2、Uri;
3、Content Provider的實現方法。
十二、XML文件的解析方法
1、什么是SAX;
2、SAX的基本原理;
3、SAX常用接口;
4、SAX解析。
十三、廣播機制(2學時)
1、Android的廣播機制(圖鑒);
2、BroadCastReceive的作用;
3、BroadCastReceive的編寫方法;
4、BroadCastReceive的生命周期。
5、注冊BroadCastReceive的方法;
6、Android內置BroadCastReceive Actions。
十四、WIFI網絡的使用
1、什么是WIFI;
2、獲取WIFI網卡的狀態;
3、操作WIFI所需要的權限;
4、改變WIFI網卡的狀態。
十五、Socket編程
1、什么是Socket;
2、Socket基本通信模型(見圖);
3、使用基于TCP協議的Socket;
4、使用基于UDP協議的Socket。
十六、Service
1、Service是什么;
2、Service不是什么;
3、Service的生命周期;
4、啟動和停止Service;