2012-01-05 9 views
0

私のアプリケーションでは、ソケットを介してサーバーとクライアントを作ることにしました。アクティビティを通じてサーバーソケットを維持する方法は?

だから私は(サーバとクライアント用)2 AsyncTasks私のonCreate上のAN製(ユーザーアクションに応じて - 私はちょうどちょうどボタンで、今のところ、テストしていたとして):

new createServer().execute(); 

または

new connectClient().execute(); 

質問は、すべてが良い動作しますが、私は私のアイデアは、多くの活動を持って実装するアプリなので、データを提供しているアプリは、createServer非同期タスクがある活動を離れるときに、クライアント(明らかに)los接続します。

"すべての時間"実行しているサーバーを維持し、接続されたクライアントに影響を与えずにユーザーが(「サーバーアプリケーション」を使用して)アプリケーションをナビゲートできる方法はありますか?たとえ毎回私がサーバーを作成しても、クライアントは接続を失うことになるからです。

本当にありがとうございます。

編集:私のテストアプリケーションの目的のために、システムはフォアグラウンドでのみ動作する必要があり、バックグラウンドなしでサービスを作成する必要はありません。

+0

これは奇妙なようです - 電話機のサーバーとクライアントの両方ですか?正面にない電話のアクティビティは一時停止されているため、バックグラウンドのサービススレッドを作成する必要があります。 http://developer.android.com/reference/android/app/Service.html – Noah

+0

@sqrfv私が答えで言及したように、サーバーをフォアグラウンドで実行したいので、サービスは不要です。 – Tiago

答えて

3

問題は、サーバーの有効期間を正しく管理していることです。まず、あなたはその生涯が欲しいものを決める必要があります。明らかに、アクティビティレベルよりも幅広くしたいと思っていますが、バックグラウンドで実行したいのですか、アプリがフォアグラウンドにあるときだけにしたいのですか?フォアグラウンドのときだけであれば、サービスを作成せずに、アプリケーションオブジェクトからコンポーネントへの参照を保持することができます。しかし、アプリがバックグラウンドであってもサーバーを稼働させたい場合は、サービスが必要です。

更新:

  • カスタムアプリケーションのクラスを作成します。

    は、ここで私は、「あなたのアプリケーションオブジェクトからコンポーネントへの参照を維持する」ことにより、どのような意味の例です。

  • それにメソッドを追加するには、サーバーのAsyncTask

    private AsyncTask mServerTask; 
    
  • への参照を保持するためにフィールドを追加

    public void startServer() { 
        mServerTask = new createServer(); 
        mServerTask.execute(); 
    } 
    
  • は、おそらくあなたのサーバーを停止するには、別の方法を追加するには、サーバーのAsyncTaskを開始する

アクティビティからサーバーを起動するには、今すぐ行うことができますmethingのように:あなたは適切に行うようにサーバーを管理するために複数の操作を行いたいと思うでしょう。もちろん、

CustomApplication app = (CustomApplication) getApplication(); 
app.startServer(); 

必ずは、二度などを、それを起動しないと、あなたは、スレッドの代わりAsyncTasksを使用することを決めるかもしれませんが、これはすべきあなたは、アクティビティの寿命を超えて生涯を持つオブジェクトをどのように持つことができるかをあなたに知らせます。

+0

はい、私はすでにサービスやフォアグラウンド(onPause/stop/resumeなどの管理)を使ってその背景を考えていましたが、まだ決まっていませんでした。フォアグラウンドになると言いますが、内部アプリケーションの中断がなくサーバーを常に稼動させるにはどうすればいいですか?コンポーネントへの参照を保持する?あなたは明確にしていただけますか? – Tiago

+0

明確にするために更新されました。 – kabuko

+0

興味深い。したがって、カスタムアプリケーションクラスのサーバーをアクティビティから起動すると、他のアクティビティを実行するとサーバーは実行を継続しますか? – Tiago

関連する問題