2012-12-27 75 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服务器)的所有消息。 –

相关问题