最近學習handler中的回調:handler.callback。出現異常
I/Choreographer: Skipped 179 frames! The application may be doing too much work on its main thread.
意思是:主線程中有耗時操作,主線程受不了了。原因是我在重寫callback的handleMessage方法時,模擬了延時操作。實際在開發中,這種情況是萬萬不可的,解決辦法是實現android的兩大原則:
1. 不要!不要在主線程(UI線程)中執行耗時操作,如網絡請求,數據庫操作等。應另開線程操作,實現方式有1) 自開線程new Thread;2) runOnUIThread; 3) post方法以及4) 異步AsyncTask
2. 一定!一定要在主線程(UI線程)中修改控件的狀態。否則會報:Only the original thread that created a view hierarchy can touch its views
這里順便給出handler的回調機制實現
代碼實現:
1. 實例化消息message
1 // declare a message 2 Message message = new Message(); 3 message.obj = "Don't call me, I'll call you";
2. 實例化Handler.Callback,重寫handleMessage方法
1 // declare a callback obj 2 Handler.Callback callback = new Handler.Callback() { 3 @Override 4 public boolean handleMessage(Message msg) { 5 // make a pause 6 SystemClock.sleep(3_000); // 就是這里出了問題,這是個耗時操作,應扔到另一個線程中 7 8 // <code to be executed during callback> 9 Log.d("TOM", "Don't call me, I'll call you"); 10 return true; 11 } 12 };
3. 發送消息
1 // send message 2 new Handler(callback).sendMessage(message);
參考鏈接: