2013-02-05 36 views
11

我有一個服務於我的應用程序運行..的Android服務和UI線程

這項服務發送消息給服務器和一個函數來獲取該對象,並使用它的對象。

的對象從服務初始化,但在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; 
    } 
} 
+0

服務在ui線程上運行。請查看intentservice中的服務,這些服務在獨立線程上運行部分進程 – njzk2

回答

23

使用IntentService,而不是Service。如果您在Service中進行網絡呼叫,則用戶界面將卡住。因此,請使用IntentService,因爲它使用單獨的Thread

而且您不知道服務器消息何時會檢索數據。只要網絡呼叫仍在進行中,如果訪問對象,則可能會引發NullPointerException。每當服務器響應時使用BroadcastReceiver s觸發Intent