摘要:Android - Thread & Handler & white screen
又再度PO了一篇跟Handler有關的文章,
不過主要是因為我在SlpashActivity onCreate部分,檢查版本是否更新,及撈取資料過久。
一啟動畫面有很明顯的white Screen,White Screen能不能被移除了,目前試了好多種方式,好像不能移除,我就自動放棄了。我支援的sdkVersion 為9以上,不知道是不是這種原因。
看GoogleMap 也是有一、兩秒的白色畫面,會不會無解我不知道。
不過White Screen卡太久,令人覺得是Bug
我想把onCreate的撰寫,直接移至另一個執行緒處理背後連線取得資料,
但因為UI 所需要呈現的Dialog則需要在MainThread,
就需要寫Handler 處理。
以下是撰寫方法
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//全螢幕設定
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_splash);
mVersionUtils = VersionUtils.getInstance(this);
new Thread(new Runnable(){
@Override
public void run() {
//確認是否更新,會自動跳更新通知對話視窗
if(mVersionUtils.checkNeedToUpdate()) {
Message msg = showUpdateHandler.obtainMessage();
showUpdateHandler.sendMessage(msg);
} else {
Message msg = startHandler.obtainMessage();
startHandler.sendMessage(msg);
}
}
}).start();
}
/**
* 啟動程序
*/
private final Handler startHandler = new Handler() {
// Create handleMessage function
public void handleMessage(Message msg) {
start();
}
};
/**
* 顯示更新資料App Dialog
*/
private final Handler showUpdateHandler = new Handler() {
// Create handleMessage function
public void handleMessage(Message msg) {
mVersionUtils.showUpdateMessage();
}
};
另外從網路上找到兩篇相關文章做參考
http://j796160836.pixnet.net/blog/post/28766165-%5Bandroid%5D-%E5%A4%9A%E5%9F%B7%E8%A1%8C%E7%B7%92-handler%E5%92%8Cthread%E7%9A%84%E9%97%9C%E4%BF%82
http://givemepass.blogspot.tw/2011/11/threadhandler.html
在才發現有
「
在Android當中,如果做超過5秒被系統強制關閉
(收到application not Responsed 簡稱 ANR)
onCreate()如果做超過10秒就會跳ANR
」
所以就馬上改寫法,避免有ANR的問題呈現