1. 程式人生 > >Can't create handler inside thread that has not called Looper.prepare()解決辦法

Can't create handler inside thread that has not called Looper.prepare()解決辦法

像提示說的,新增 Looper.prepare(); 

Thread action=newThread() { 

publicvoidrun() {

 Looper.prepare(); 

 todo(); 

 Looper.loop(); } }; action.start()

解決辦法二:使用handler

在主activity中定一個Handler的成員,然後實現handlemassage函式,建立執行緒後在runable的run函式裡new一個message,然後指定message物件的what成員,這個是指定message的一個id,然後在run中呼叫Handler的成員,使用其成員方法中的sendmessage(好像是叫這個),handlemassage函式中引數有個massage,根據該message引數中的what來對你傳送message時指定的what來處理UI的功能

privateHandler mHandler=newHandler(){       publicvoidhandleMessage(Message msg) {             switch(msg.what)     {            caseID_USER:                  //獲取傳遞的資料//Bundle data = msg.getData();                //int count = data.getInt("COUNT");                  //處理UI更新等操作      } }; };
主activity中建立執行緒

Java code <!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> MyThread thread=newMyThread();   mThread=newThread(thread);   mThread.start();
MyThread  
Java code <!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->
classMyThreadimplementsRunnable {          publicvoidrun() {             //執行資料操作,不涉及到UI             Message msg=newMessage();              msg.what=ID_USER;           //這三句可以傳遞資料            //Bundle data = new Bundle();           //data.putInt("COUNT", 100);//COUNT是標籤,handleMessage中使用            //msg.setData(data);           mHandler.sendMessage(msg);  //向Handler傳送訊息,更新UI }