Android provides the Invalidate method for interface refresh, but invalidate cannot be called directly in the thread because he is violating the single-threaded model: Android UI operations are not thread-safe, and these operations must be called in the UI thread.
There are two ways to refresh the Android interface, namely, using handler and using Postinvalidate () to refresh the interface in the thread.
Refresh the interface with handler
Instantiate an handler object and override the Handlemessage method call invalidate () to implement the interface refresh, while the thread updates the message through the SendMessage send interface.
// to open a thread in OnCreate () New Thread (new gamethread ()). Start ();
//instantiate a handlerHandler MyHandler =NewHandler () {//processing after receiving a message Public voidhandlemessage (Message msg) {Switch(msg.what) { CaseActivity01.REFRESH:mGameView.invalidate ();//Refresh Interface Break; } Super. Handlemessage (msg); } };
classGamethreadImplementsRunnable { Public voidrun () { while(!Thread.CurrentThread (). isinterrupted ()) {Message Message=NewMessage (); Message.what=Activity01.refresh; //Send MessageActivity01. This. Myhandler.sendmessage (message); Try{Thread.Sleep (100); } Catch(interruptedexception e) {thread.currentthread (). interrupt (); } } }}
Use Postinvalidate () to refresh the interface
The use of postinvalidate is relatively simple, do not need to handler, directly in the thread call Postinvalidate.
class gamethread implements Runnable { public void run () { while (! {thread.sleep ( 100 catch (Interruptedexception e) { Thread.CurrentThread (). interrupt (); // use Postinvalidate to update the interface directly in the thread Mgameview.postinvalidate (); } }}
Android Interface Refresh method