2011年4月19日 星期二

Android 開發教學筆記 - 開發上碰到的 bug 筆記

今天同事跑來問我一些問題,我看到他的 code 馬上就猜出問題在哪 XD 明明同樣的 code 在其他範例可以跑,但此刻就是跑起來會看到 exception,是誰都會很火大吧 XD


解決方式?其實沒有正解 XD


狀況一:


現象:


public void onCreate(Bundle savedInstanceState) {
    ...
    Button testBtn = (Button) findViewById( R.id.testBtn );
    testBtn.setOnClickListener(this);

    ...
}


並且 layout/main.xml 中已經補好 Button 並且 id 為 testBtn 了,但很奇怪的跑上述程式會當掉,直到把 testBtn.setOnClickListener(this); 移除才 ok


解法:


去變動一下 layout ,例如在加個 textview 後再存檔,或許可以解決 XD


我之前為了這種問題,程式碼都改寫成:


    Button testBtn = (Button) findViewById( R.id.testBtn );
    if( testBtn )
        testBtn.setOnClickListener(this);


但這只是避免 exception 罷了 :P 目前正解還不清處,或許真的只要重開 Eclipse 就能解決吧


狀況二:


現象:


使用 Worker thread 去做運算,並且完工後去更新 UI 部分,結果就是不正常,(有時)無法更新 UI


解法:


上過課後,我才明瞭這個問題!因為 Android UI is not thread-safe ,所以更新 UI 請統一交給 main thread 處理。這也是我在 Android 開發教學筆記 - 使用 Regular Expression、Network Connection 和 Thread 中曾碰到的問題,那時也只是誤打誤撞把更新 UI 的動作交還給 Handler 來解決。


嗯,目前太少開發,筆記僅有上述兩點 Orz


經過這次聽別人的上課,我覺得收穫還不少,雖然自己去找資料可以完成一些功能面的工作,但系統底層還是要多多了解,這通常會受限於時間關係而無法進行,這時候聽別人上課可以有所吸收啊。


沒有留言:

張貼留言