11

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

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

该对象是从服务初始化的,但是当 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;
    }
}
4

2 回答 2

27

使用IntentService而不是Service. 如果您在 a 中进行网络调用Service,则 UI 将卡住。因此,请使用 an,IntentService因为它使用单独的Thread.

而且您不知道服务器消息何时会检索数据。NullPointerException只要网络调用仍在进行中,如果访问对象,就会抛出A。每当服务器响应时,使用BroadcastReceivers 触发。Intent

于 2013-02-05T08:38:27.400 回答
5

据我所知,Android 服务在 UI 线程上运行。如果要进行异步作业,则应使用Intent Service
请参阅: IntentService 和 Service 之间的区别是什么?
这是您可以尝试的Intent 服务示例。

于 2013-02-05T08:42:33.627 回答