現在、いくつかの GUI とネットワーク操作を備えたアプリを開発していますが、GUI のないライブラリのようにする必要があります。
プロパティ/Androidの下に「ライブラリです」オプションがあることを知っています。しかし問題は、GUI 要素をプロジェクトから別のアプリに移動して、ライブラリ/プロジェクトに Java コードのみが含まれるようにする方法です。なにか提案を ?
ありがとう。
現在、いくつかの GUI とネットワーク操作を備えたアプリを開発していますが、GUI のないライブラリのようにする必要があります。
プロパティ/Androidの下に「ライブラリです」オプションがあることを知っています。しかし問題は、GUI 要素をプロジェクトから別のアプリに移動して、ライブラリ/プロジェクトに Java コードのみが含まれるようにする方法です。なにか提案を ?
ありがとう。
コードをライブラリに作成している場合は、できる限りそれを他のものから切り離したいと考えています。これにより移植性が大幅に向上し、より多くの人がライブラリを好きなように使用できるようになります。今はこのライブラリを自分用に使用していても、後で他の人に公開したいと思うかもしれません。
たとえば、コードは現在次のようになっている可能性があります。
public void computeSum(int a, int b) {
int sum = a + b;
mTextView.setText(String.valueOf(sum));
}
現在、このコードは と密接に結合されていmTextView
ます。代わりに、次のようにコードを書き直すのが理にかなっています。
//In library
public int computeSum(int a, int b) {
return a+b;
}
と
//Somewhere in your app
mTextView.setText(String.valueOf(computeSum(3,4)));
computeSum()
これは小さな変更ですが、と結合されなくなっていることがわかりますmTextView
。これにより、プロジェクト全体や他のプロジェクトでさえも、はるかに使いやすくなります。現在、computeSum()
メソッドは API の一部です。
したがって、ネットワーク呼び出しについては、コールバックまたは戻り値を使用して、GUI のものから分離するようにしてください。
あなたの最新のコメントに関して:
次のようなラッパーを作成できます。
public class UIWrapper {
public Runnable runnable;
public SomeUiCallback callback;
}
そして、これを AsyncTask で使用します。
public class YourTask extends AsyncTask<UIWrapper, Void, Void> {
SomeUiCallback mCallback;
protected void doInBackground(UIWrapper... wrapper) {
mCallback = UiWrapper.callback;
UIWrapper.runnable.run();
}
protected void onProgressUpdate() {
}
protected void onPostExecute() {
mCallback.runYourUiStuff();
}
}
私はそのコードを手短に書いたので、コンパイルできない可能性がありますが、うまくいけば、アイデアが得られることを願っています. このようなものがうまくいくと思いますが、それが最もエレガントなソリューションかどうかはわかりません。Runnable は、スレッドで実行したいものに置き換えることができます。
したがって、UIWrapper と YourTask の両方がライブラリに存在します。UIWrapper を作成し、それを YourTask で使用します。