Android Postinvalidate () for UI Refresh

Source: Internet
Author: User

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.

Invalidate () is used to refresh the view and must be working in the UI thread. For example, when you modify the display of a view, call invalidate () to see the redrawn interface. Invalidate () is called to pop the old view from the main UI thread queue. An Android program has only one process by default, but it can have a number of threads under one process.

In so many threads, the thread that is primarily responsible for controlling the display, update, and control interaction of the UI interface is called the UI thread, and since the OnCreate () method is executed by the UI thread, the UI thread can also be understood as the main thread. The rest of the threads can be understood as worker threads.

Invalidate () is mobilized in the UI thread and can be used by handler to notify the UI thread of interface updates through a worker thread.

and Postinvalidate () is called in the worker thread

using Invalidate () to refresh the interface

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 handler

Handler MyHandler = new Handler () {
Receive Message post processing
public void Handlemessage (Message msg) {
Switch (msg.what) {
Case Activity01.refresh:
Mgameview.invalidate (); Refresh Interface
Break
}

Super.handlemessage (msg);
}
};

Class Gamethread implements Runnable {
public void Run () {
while (! Thread.CurrentThread (). isinterrupted ()) {
Message message = new Message ();
Message.what = Activity01.refresh;
Send Message
Activity01.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.CurrentThread (). isinterrupted ()) {
try {
Thread.Sleep (100);
} catch (Interruptedexception e) {
Thread.CurrentThread (). interrupt ();
}

Use Postinvalidate to update the interface directly in the thread
Mgameview.postinvalidate ();
}
}
}

Android Postinvalidate () for UI Refresh

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.