Handler 一個線程只有啓動了Looper,才能在其中創建Handler的對象,進行消息處理,否則程序會出現異常。
啓動Looper通過調用靜態方法Looper.prepare();來實現。
一個線程只能有一個Looper和一個MessageQueue,但是可以有多個Handler對象。程序中可以使用不同的Handler對象處理不同的消息。
Timer定時器也是常用的實現多線程程序的方式,但是在定時器中也不能直接進行UI操作,需要通過Handler類,Activity.runOnUiThread(Runnable)方法,或者View.post(Runnable)方法等方式來間接進行UI操作。
AsyncTask類提供的一個輕量級的基於多線程的後臺異步工作處理的類。後臺工作比較簡單,只需要向UI線程傳遞一些簡單數據時可以使用AsyncTask類。
private static final long serialVersionUID = 1L;
如果你的類Serialized存到硬盤上面後,可是後來你卻更改了類的field(增加或減少或改名),當你Deserialize時,就會出現Exception的,這樣就會造成不兼容性的問題。
但當serialVersionUID相同時,它就會將不一樣的field以type的預設值Deserialize,可避開不兼容性問題。
WebView v = (WebView) findViewById(R.id.view);
v.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view,String url){
view.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);
}
});
v.loadUrl("http://blog.csdn.net/jijiaxin1989/article/details/44178489");
setWebViewClient()方法用於指定loadUrl()方法打開頁面的載體。如無此行代碼程序也能運行,但是默認的初始頁面index.html頁面會由WebView組件轉交給android系統默認瀏覽器打開。加上次行代碼後,頁面將由webview組件本身打開。
1、改變標題內容:public void setTitle (CharSequence title)
2、隱藏標題:requestWindowFeature(Window.FEATURE_NO_TITLE);
3、隱藏標題和最上面的電池電量及信號欄(全屏):
public void setFullscreen() {
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
4自定義標題:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//預先設置允許改變的窗口狀態,需在 setContentView 之前調用,否則設置標題時拋運行時錯誤。
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.custom_title);
//標題區域可設置爲 layout ,如此可以有豐富的展現方式
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,
R.layout.custom_title_1);
}
res\layout\custom_title_1.xml 包含一個TextView 用於顯示標題。Android可以把標題做爲一個layout來展示,具有很好的擴展性。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/screen"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical">
<TextView android:id="@+id/left_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="@string/custom_title_left" />
</RelativeLayout>
監聽按鍵,返回鍵攔截,返回前一個webview頁面
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK){
mWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
數據解析
json數據是以鍵值對形式存放的字符串,xml數據則類似於HTML,是以標籤形式提供的文本。
json是目前常用的輕量級網絡數據傳輸格式,android api中直接支持對JSON數據的處理。json解析中常用的類有JSONObject、JSONArray、JSONStringer、JSONTokener等。
對於格式較複雜的數據,仍然需要使用xml格式
android api中提供瞭如下幾種處理xml數據的方法:
DOM方式:基於樹的解析與處理
SAX方式:基於流的解析與處理(推方式)
XML PULL方式:基於流的解析與處理(拉方式)
xml數據的組織形式就是樹狀結構,
DOM方式處理數據就是先讀取所有的xml數據,將其構造成一棵樹,然後通過一些方法進行數據的處理
SAX並非事先把所有的xml節點都讀入內存,再進行數據處理,而是一邊讀一邊對所需要的數據進行處理。基於事件觸發的,等帶着把數據推送出去。
XML PULL採用主動拉去的方式。
webservice作爲一個額成熟技術,提供了跨平臺的信息交互方法,目前是異構網絡主流的交互技術,使用Ksoap2第三方包。