The application may be doing too much work on its main thread.


最近學習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);

參考鏈接:

http://stackoverflow.com/questions/14678593/the-application-may-be-doing-too-much-work-on-its-main-thread


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM