Android四大組件 1、Activity a、Activity是指與用戶交互的界面。 b、一個Activity通常就是一個單獨的屏幕(視窗)。 c、Activity之間通過Intent傳遞數據。 2、service a、service在後臺運行,沒有圖形界面。 b、service的啟動方式有兩種 ...
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中佈置,自定義屬性 。