Android Service and UI Thread

独自空忆成欢 提交于 2019-11-30 14:52:54

问题


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;
    }
}

回答1:


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.




回答2:


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.



来源:https://stackoverflow.com/questions/14702922/android-service-and-ui-thread

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!