2012-12-27 96 views
0

我有一項服務和一項活動。在服務中,我廣播從網絡收到的消息,並在活動中顯示這些消息。這工作正常。但當活動在後臺時,所有消息都將丟失。android:當活動在後臺時如何從服務中獲得廣播消息

如何從服務器獲取最後的消息(如果存在)在活動onResume(或onCreate)?

編輯: 服務:

public class server extends Service implements Runnable 
{ 
    @Override 
    public void onCreate() 
    { 

    } 

    @Override 
    public IBinder onBind(Intent arg0) 
    { 
     return null; 
    } 

    @Override 
    public void onStart(Intent intent, int startID) 
    { 
     //initializing socket and begining listen 
     new Thread(this).start(); 
    } 

    public void run() 
    { 
     String readed; 
     while (true) 
     { 
      if(reader == null) continue; 
      try 
      { 
       if ((readed = reader.readLine()) != null) 
       { 
        Intent intent = new Intent(SEND_DATA_INTENT); 
        intent.putExtra("type", "message"); 
        intent.putExtra("content", readed.substring(1)); 
        sendBroadcast(intent); 
        Thread.sleep(100); 
       } 
      } 
      catch (Exception ee) { } 
     } 
    } 
} 

和活動:

public class menhaj extends Activity 
{ 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
    @Override 
    protected void onResume() 
    { 
     if (dataUpdateReceiver == null) dataUpdateReceiver = new DataReciver(); 
     IntentFilter intentFilter = new IntentFilter(server.SEND_DATA_INTENT); 
     registerReceiver(dataUpdateReceiver, intentFilter); 
     super.onResume(); 
    }; 

    @Override 
    protected void onPause() 
    { 
     if (dataUpdateReceiver != null) unregisterReceiver(dataUpdateReceiver); 
     super.onPause(); 
    }; 

    private class DataReciver extends BroadcastReceiver 
    { 
     @Override 
     public void onReceive(Context context, Intent intent) 
     { 
      if (intent.getAction().equals(server.SEND_DATA_INTENT)) 
      { 
       Bundle bdl = intent.getExtras(); 
       String type = bdl.getString("type"); 
       if (type.equals("message")) 
       { 
        String message = bdl.getString("content"); 
        db.addMessage(message); 
        showMessage(message); 
       } 
      } 
     } 
    } 
} 

回答

0

我將宣佈BroadcastReceivers,那些可以接收消息並從您的活性起着/應用帶回

1

如果該活動位於後臺,用戶可能不希望看到來自它的消息。改爲從您的服務中顯示通知。一般來說,一項活動應該自行註銷onPause(),並在其回到前臺時再次註冊onResume()

+0

+1,是的,但是當你需要顯示谷歌地圖或者將應用程序帶到後臺時,管理員會有錯誤的編程範例或請求。我不能總是提出StupidBossOrClientException :) – 2012-12-27 15:18:23

+0

直接設置你的經理:)你可以通過點擊通知來顯示你的地圖等。除非這是絕對重要的(颶風/地震即將到來等),否則在用戶做其他事情時(也許更重要)只是彈出另一個應用程序並不是一個好主意。 –

+0

謝謝,但在我的情況下,用戶必須在活動中看到來自manager(pc服務器)的所有消息。 –

相關問題