11

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;
    }
}
Asaf Nevo
  • 11,338
  • 23
  • 79
  • 154
  • a service runs on the ui thread. take a look at intentservice for services that run a part of the process on a separated thread – njzk2 Feb 05 '13 at 08:39

2 Answers2

27

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.

aboger
  • 2,214
  • 6
  • 33
  • 47
koti
  • 3,681
  • 5
  • 34
  • 58
5

As far I know, Android service run on UI thread. If you want to make an asynchronous job, you should use Intent Service
See: What is the difference between an IntentService and a Service?
Here is an Intent service example you can try.

Community
  • 1
  • 1
ductran
  • 10,043
  • 19
  • 82
  • 165