我有一項服務和一項活動。在服務中,我廣播從網絡收到的消息,並在活動中顯示這些消息。這工作正常。但當活動在後臺時,所有消息都將丟失。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);
}
}
}
}
}
+1,是的,但是當你需要顯示谷歌地圖或者將應用程序帶到後臺時,管理員會有錯誤的編程範例或請求。我不能總是提出StupidBossOrClientException :) – 2012-12-27 15:18:23
直接設置你的經理:)你可以通過點擊通知來顯示你的地圖等。除非這是絕對重要的(颶風/地震即將到來等),否則在用戶做其他事情時(也許更重要)只是彈出另一個應用程序並不是一個好主意。 –
謝謝,但在我的情況下,用戶必須在活動中看到來自manager(pc服務器)的所有消息。 –