Android四大組件
1、Activity
a、Activity是指與用戶交互的界面。
b、一個Activity通常就是一個單獨的屏幕(窗口)。
c、Activity之間通過Intent傳遞數據。
2、service
a、service在后台運行,沒有圖形界面。
b、service的啟動方式有兩種:startService,是由其它組件調用startService方式啟動的,當服務處於started狀態時,與其它組件的生命周期沒有聯系了,即使其它組件銷毀了服務依然處在運行的狀態,因此,在服務完成任務后需要調用stopService()或者sotpself()方法停止。 bindService,調用者與服務綁定在一起,一旦調用者銷毀,服務也跟着銷毀。
c、service需要在AndroidManifest中聲明,使用<service android:name=".MyService"></service>
3、BroadcastReceiver
a、使用它對你應用外部的事件經行過濾,只對感興趣的外部事件(如當電話呼入、數據網絡可用時)接收時做出響應。
b、廣播接收器也沒有用戶界面。它們可以啟動一個activity、serice或NotificationManager來響應它們收到的信息.
c、廣播接收者的注冊方式有兩種,一種是靜態注冊,在AndroidManifast中使用
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="test"/>
</intent-filter>
</receiver>
另一種是動態注冊,
MyBroadcaetReceiver broad=new MyBroadcastReceiver();
IntentFilter intentfilter=new IntentFilter();
intentfilter.addAction(ACTION);
registerReceiver(broad);
4、ContentProvider
a、android平台提供了contentProvider使一個應用程序的指定數據集提供給其它應用程序。其它應用程序可以用ContentResolver類從該內容中獲取數據。
b、只有需要在多個應用程序之間共享的數據時才需要ContentProvider.
c、ContentProvider用於保存或獲取數據,並使其對所有應用程序可見。這是不同應用程序之間數據共享的唯一方式。
d、ContentProvider使用URL來標識數據集,這里的URL是唯一的,以content://作為前綴,表示該數據由ContentProvider來管理。
Android中常用的布局
1.LinearLayout線性布局
LinearLayout容器中的組件一個挨一個排列,通過Android:orientation屬性控制各個組件是橫向還是縱向排列。
2.FrameLayout幀布局
FrameLayout直接繼承ViewGroup組件。幀布局為每一個加入其中的組件創建一個空白區域,每個子組件占據一幀,這些幀根據gravity屬性執行自動對齊。
3、RelativeLayout相對布局
為了控制該布局內容的各個組件分布,RelativeLayout提供的一個內部類RelativeLayout.LayoutParams。
4、TableLayout表格布局
TableLayout繼承自LinearLayout,本質上仍然是線性布局管理器.表格布局采用行、列的形式來管理UI組件,並不需要明確的聲明包含多少行,多少列,而是通過添加TableRow、其它組件來控制表格的行數和列數。每向TableLayout中添加一個TableRow就代表一行,每向TableRow中添加一個組件就代表一列。
5、Android4.0新增的網格布局GridLayout
GridLayout是Android4.0增加的網格布局控件,與TableLayout有些相似,它把整個容器划分為rows*columns個網格,每個網格可以放置一個組件。比TableLayout性能好。
6、AbsoluteLayout絕對布局
AbsoluteLayout是由開發人員通過X、Y坐標來控制組件的位置。每個組件都可以指定layout_x;layout_y;
JSON/XML數據解析
XML
通過InputStream獲取流的方式解析
InputStream is=connent.getInputStream();
XmlPullParser pullparser=Xml.newPullParser();
pullparser.setInput(is,"utf-8");
int type=pullparser.getEventType();
while(type!=XmlPullParser.END_DOCUMENT){
swith(type){
case XmlPullParser.START_TAG:
String name=pullparser.getName();
if("student".equals(name)){
String str= pullparser.getAttrbuteName(0);
}else if("sname".equals(name)){
String sname=pullparser.nextText();
}
break;
case XmlPullParser.END_TAG:
break;
}
type=pullparser.next();
}
is.close();
JSON解析
InputStream is=connection.getInputStream();
int len=0;
byte[] buf= new byte[1024];
StringBuffer sb=new StringBuffer();
while ((len=is.read(buf))!=-1){
String s=new String(buf,0,len);
sb.append(s);
}
BigObject bigObject=JSON.parseObject(sb.toString(),BigObject.class);
int count=bigObject.getCount();
Log.i("test",count+"");
List<Student> stuList=bigObject.getStudents();
for (Student sss : stuList) {
Log.i("test",sss.getSname()+" "+sss.getSsex());
}
Android的數據存儲方式
1、SharedPreferences方式
SharedPreferences用來存儲一些簡單的數據,以鍵值對的方式存儲數據。
2、數據庫SQLite
SQLite是Android所帶的一個標准的數據庫,支持SQL語句,是一個輕量級的嵌入式數據庫。
3、網絡存儲
以POST請求方式把數據發送到某一個地址上
4、文件存儲
在Android中,提供了openFileInput和openFileOutput方法讀取設備上的文件,
FileOutputStream fos=openFileOutput("fileName",Contex.MODE_PRIVATE);
FileInputStream fls=openFileInput("fileName");
當FileOutputStream指定的文件不存在時,android會自動創建一個。默認情況下會覆蓋原來的文件。
5、ContentProvider
Android內部唯一一個可以實現數據共享的方法。一個ContentProvider類實現了一組標准的方法接口,從而能讓其它應用讀取。外部的程序通過ContentResolute接口訪問ContentProivder提供的數據。
Handler機制、原理
handler機制是更新UI界面的機制,可以接收消息也可以發送消息。
handler的原理:handler封裝消息的發送;Looper 消息封裝的載體,內部包含一個MessageQueue,所有的handler發送的消息都走向這個消息隊列,Looper.looper方法,就是一個死循環,不斷的從MessageQueue中讀取消息,如果有消息就處理消息,沒有就阻塞;handler負責發送消息,Looper負責接收消息,並把消息傳回handler。MessageQueue存儲消息的容器。
Android圖片的二次采樣以及緩存機制
1、二次采樣
a、用BitmapFactory解碼圖片時,有時候會失敗。這可能是由於圖片過大造成的。因此,需要分配更少的內存空間來存儲。BitmapFactory.decodeFile(imageFile);
b、BitmapFactory.Options.inSimpleSize 設置恰當的inSimpleSize可以使BitmapFactory分配更少的空間以消除錯誤。
c、BitmapFactory.Options提供inJustDecodeBounds屬性,inJustDecodeBounds設置位true后,decodeFile就不會分配空間,但可以計算出原始圖片的長度和寬度。即可得到一個恰當的inSampleSize。緩存機制,讀取:內存--強引用--軟引用--文件--網絡。詳見https://www.cnblogs.com/RabbitLx/p/5792268.html;
Android自定義View的設計和使用
1、首先繼承View類
2、必須實現其中的一個構造方法,一般都是實現兩個;
3、重寫onDraw(canvas)方法進行繪制,畫線,畫圓,畫矩形等;
4、重寫onMesure(),調整大小,默認是全屏;
5、如需樣式在xml中布置,自定義屬性 。
