2012-11-15 41 views
0

我的活動將應用程序周圍的應用程序共享給服務中的工作線程。線程使用處理函數sendMessage()使用handleMessage()來處理它們安卓服務中存儲的捆綁鍵/值消失

活動進入背景Android殺死它,當它回來時它會再次啓動。

Activity調用Service的靜態方法來檢查服務中線程的最後一個狀態(關於最後一個sendMessage()是什麼)。因此,它可以根據服務線程的最後一條消息

Message m = SyncService.lastSyncMessage(); 

出於某種原因,消息m內的軟件包有時是有效的初始化其UI狀態(包含鍵/值對),有時鍵/值不存在

通過處理程序將消息轉發到UI的線程側的代碼如下所示。

Handler uiHandler = UIGlobals.getHandler(); 
    Message msg = uiHandler.obtainMessage(); 
    Bundle msgBundle = new Bundle(); 

    msgBundle.putInt("status", syncEv.status.ordinal()); 
    msgBundle.putString("param", syncEv.param); 

    msg.setData(msgBundle); 
    if(uiHandler.sendMessage(msg)) 
    { 
    lastMessage = msg; 
    } 

在服務

public static Message lastSyncMessage() 
{ 
    return lastMessage; 
} 

回答

0

靜態方法中的消息對象從池來了。當Activity消失時,處理程序的回調指向不可用的對象。 Android似乎重新準備了Pool中使用的消息引用, 爲了解決它,我將Actual Event存儲在靜態成員中,而不是Message中。