Android Service and UI Thread

Asaf Nevo picture Asaf Nevo · Feb 5, 2013 · Viewed 15.2k times · Source

I have a Service running in my app..

This Service has an object for sending message to the server and a function to get that object and use it.

The object is initialized from the Service and yet when the UI gets this objects and use it - it looks like it uses it on the UI Thread..

Is this correct ? Is there a way i can make my object always run from the Service Thread ?

public class ServerMessagesManager extends Service {
    private ServerMessagesReceiver serverMessageReceiver;
    @Override
    public void onCreate() {
        super.onCreate();
        this.serverMessageReceiver = new ServerMessagesReceiver(app);
    }

    public ServerMessagesReceiver getServerMessagesReceiver()
    {
        return serverMessageReceiver;
    }
}

Answer

koti picture koti · Feb 5, 2013

Use IntentService instead of Service. If you do network calls in a Service, the UI will stuck. Therefore, use an IntentService since it uses a separate Thread.

And you do not know when a server message will retrieve the data. A NullPointerException could be thrown if objects are accessed as long as network calls are still in progress. Use BroadcastReceivers to fire an Intent whenever a server responds.