私は同様の問題を抱えていましたが、これが私がしたことです。
MyService
とMyActivity
には共通部分MyEngine
がありますが、これら 2 つのケースでは動作が少し異なるはずです。
異なる点の 1 つはセットアップですが、このセットアップはクラスMyService
とで行われますMyActivity
。
アクティビティとサービスで異なるもう 1 つのことは、リスナーを介して行われます。インターフェイスをMyEngine
定義し、そのインターフェイスのさまざまな実装をエンジンに提供します。MyEngine.Listener
MyService
MyActivity
したがって、ブール値を渡したい場合は、次の 2 つの方法が可能です。
// Method 1: different initialization
class MyEngine {
MyEngine(boolean isService) { ... }
}
class MyActivity extends Activity {
private MyEngine = new MyEngine(false);
...
}
class MyService extends Service {
private MyEngine = new MyEngine(true);
...
}
// Method 2: callbacks
class MyEngine {
interface Listener {
boolean isService();
}
private Listener mListener;
MyEngine(Listener listener) { mListener = listener; }
}
class MyActivity extends Activity {
private mListener = new MyEngine.Listener() {
boolean isService() { return false; }
}
private MyEngine = new MyEngine(mListener);
...
}
class MyService extends Service {
private mListener = new MyEngine.Listener() {
boolean isService() { return true; }
}
private MyEngine = new MyEngine(mListener);
...
}
ノート。
上記の例で使用されているブール値は、実際には役に立ちません。たとえば、別のログ ファイル名を使用する場合は、ブール値ではなくファイル名を渡す方が適切です。2 つの異なるアクションを実行する場合は、2 つの実装を持つ 1 つのリスナー関数を使用することをお勧めします。
もちろん、 a を渡してまたはContext
の子であるかどうかを確認したり、現在のプロセスの名前を取得したりすることもできますが、これらは Android 固有の実装の詳細であり、絶対に必要でない限り依存しない方がよいでしょう。Activity
Service