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第三方包。