views:

530

answers:

2

Hi,

I am quite new to Android and Java. Before I was working with C++ where the events where dispatched with messages. Now I would like to create the same user experience for Android platform and I would appreciate any of your suggestions or comments on what is the best way to bind events to user controls.

Here is an example from C++:

ON_MESSAGE(WM_RECORD_START, &CMainFrame::OnRecordStart)//Method OnRecordStarts() executes on WM_RECORD_START_MESSAGE

...

LRESULT CMainFrame::OnRecordStart(WPARAM wParam, LPARAM lParam)
{

        m_pNetworkCtrl->SetGeoLocationInfo();
        ...
}

...

void CMainFrame::RecordStart()
{
    PostMessage(WM_RECORD_START);
}

In the case above the method RecordStart() is bound to a button (it is executed when a button is pressed) and posts the message WM_RECORD_START. When the message WM_RECORD_START is received, the method OnRecordStart() is executed.

As mentioned before I would like to create a responsive user interface and am not sure if it would be good enough if the method OnRecordStart() is called directly from RecordStart():

void RecordStart()
{
OnRecordStart();
}

I would really appreciate any of your suggestions.

Thanks!

+1  A: 

You can emulator the MFC style behavior in Android by using a Handler to post a Runnable into the message queue.

Here is a brief example

class MyClass
{
    Handler m_myHandler;
    Runnable m_myRunnable;

    MyClass()
    {
        m_myHandler = new Handler();
        m_myRunnable = new RUnnable()
        {
            public void run()
            {
                // do your stuff here
            }
        };
    }

    public void onclickListener(...)
    {
        // push the runnable into the message queue
        m_myHandler.post(m_myRUnnable);
    }
}
snctln
A: 

You have 2 questions here.

  1. How to bind controls. I use anonymous inner classes everywhere. It is a bit verbose to type in but auto completion makes it a snap.

  2. how to make the UI responsive. The key is not to do anything time consuming in the UI thread. If it takes more than .1s, do the work in a worker thread and notify the UI to update when the task is done. The other thing is to make sure you don't generate a lot of garbage since the android GC is pretty primitive right now.

hacken