0

私にはサービスと活動があります。サービスでは、ネットワークから受信したメッセージをブロードキャストし、アクティビティではこれらのメッセージを表示します。これは正常に機能します。ただし、アクティビティがバックグラウンドにある場合、すべてのメッセージが失われます。

アクティビティ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);
                }
            }
        }
    }
}
4

2 に答える 2

1

そのアクティビティがバックグラウンドにある場合、ユーザーはおそらくそのアクティビティからのメッセージを見たくないでしょう。代わりにサービスからの通知を表示します。通常、アクティビティは自身の登録を解除し、フォアグラウンドに戻ったときにonPause()再度登録する必要があります。onResume()

于 2012-12-27T15:16:00.957 に答える
0

私はBroadcastReceiversを宣言します、それらはメッセージを受信し、あなたのavtivity/appから戻すことができます

于 2012-12-27T15:13:30.160 に答える