11

アプリでサービスを実行しています..

この Service には、サーバーにメッセージを送信するためのオブジェクトと、そのオブジェクトを取得して使用するための関数があります。

オブジェクトはサービスから初期化されますが、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ます。でネットワーク呼び出しを行うServiceと、UI が動かなくなります。したがって、IntentService別の を使用するため、 を使用しThreadます。

また、サーバー メッセージがいつデータを取得するかもわかりません。NullPointerExceptionネットワーク呼び出しがまだ進行中である限り、オブジェクトがアクセスされると、 がスローされる可能性があります。サーバーが応答BroadcastReceiverするたびに s を使用して を起動します。Intent

于 2013-02-05T08:38:27.400 に答える
5

私の知る限り、Android サービスは UI スレッドで実行されます。非同期ジョブを作成する場合は、次を参照してIntent Service
ください: IntentService と Service の違いは何ですか?
これは、試すことができるIntent サービスの例です。

于 2013-02-05T08:42:33.627 に答える