Android服务和UI线程

时间:2013-02-05 08:19:31

标签: android service ui-thread

我的应用程序中运行了一个服务..

此服务有一个对象,用于向服务器发送消息以及获取该对象并使用它的函数。

该对象是从服务初始化的,但是当UI获取此对象并使用它时 - 看起来它在UI线程上使用它。

这是对的吗?有没有办法让我的对象始终从服务线程运行?

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

    public ServerMessagesReceiver getServerMessagesReceiver()
    {
        return serverMessageReceiver;
    }
}

2 个答案:

答案 0 :(得分:27)

使用IntentService代替Service。如果您在Service中进行网络通话,则用户界面会停滞不前。因此,请使用IntentService,因为它使用单独的Thread

您不知道服务器消息何时将检索数据。只要网络调用仍在进行中,只要访问了对象,就可以抛出NullPointerException。每当服务器响应时,使用BroadcastReceiver来触发Intent

答案 1 :(得分:5)

据我所知,Android服务在UI线程上运行。如果要进行异步作业,则应使用Intent Service
看到: What is the difference between an IntentService and a Service?
这是你可以尝试的Intent service example