Android - Thread & Handler & white screen

摘要: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的問題呈現