2011-02-10 12 views
0

私はAndroid開発に若干新しく、私のネットワークでDLNAサーバを閲覧し、各DLNAサーバをディレクトリとして閲覧できる非常に簡単なアプリケーションを構築しようとしています。 1つのアクティビティでネットワーク上のすべてのDLNAサーバが表示され、ユーザがそれを選択した後、DLNAメディアサーバのディレクトリを参照する別のアクティビティにリダイレクトします。ネットワークデータにアクセスする方法としてサービスを使用する必要がありますか?

私の質問は非常に基本的です:どのように 'selected server'、 'current directory'、およびこのような情報を保持するのですか?アプリケーションの残りの部分で何をすべきかを知る方法が必要です。このデータをサービスに組み込む必要がありますか?それはサービスがどんなものであるべきかの共通理解に違反しているようです。アプリケーションの状態を維持するにはどうすればよいですか?

答えて

2

あなたはいくつかの選択肢があります。私が一番好きなのは、あるアクティビティから次のアクティビティに送るインテントオブジェクトにこれらの値を渡すことだけです。したがって、DLNAメディアサーバーのディレクトリをブラウズするアクティビティは、選択されたサーバーをインテントで受信し、DLNAリストアクティビティからのものであれば、それは素晴らしいですが、メディアサーバーディレクトリをユーザー。アクティビティ内の機能をカプセル化することは非常に難しいので、データのアプリケーションの残りの部分に依存する必要はありません。

本当にアプリケーション全体で必要なデータがある場合は、SharedPreferencesをご覧ください。これらは、ユーザーに表示可能なので、ユーザーはアプリケーションの呼び出しの間中存続する選択を行うことができ、アプリケーション内のアクティビティーは、プリファレンスを容易に読み取って最新の状態を保つことができます。ただし、すべての設定を表示可能にする必要はありません。環境設定エディタを作成して、ユーザに表示することなく自分の環境設定を読み書きすることができます。

共有値を保持するシングルトンクラスを設定し、すべてのアクティビティを参照できるようにするか、または最後の手段としてApplicationクラスを拡張し、ゲッターとセッターを作成して、あなたの申請。アプリケーションはAndroidの重要なクラスなので、最後は残念だと思うので、あなたは今や将来的に何かを間違って壊さないように、より良いままにしておいてください。

あなたの他の質問に答えるには、サービスを使用してネットワークアクセスを行うだけでなく、スレッドも作成する必要があります。 Androidサービスは、デフォルトでバックグラウンドスレッドを含んでいません。あなた自身でそれを行う必要があります。あなたはメイン(a.k.a.UI.)スレッドからネットワークコールを行うべきではありません。

+0

優れた答え:)私は、雪だるまらのようにデータを渡し続け、渡されたインテントに必要なすべての関連データを追加すると思いますか? –

+0

私はそれにはいります。 1つのアクティビティーに入ったものはすべて、次のアクティビティーに渡す必要があることは間違いありませんが。 –