コンストラクターを介したサービス クラスの直接インスタンス化が推奨されない理由を知りたいと思いました。それに関連するものは見つかりませんでした。以下は非常に基本的な例です。
サービス クラス:
public class SomeRandomClass extends Service {
private final Context mContext;
public SomeRandomClass(Context context) {
this.mContext = context;
}
}
メインのアクティビティ/サービス内:
SomeRandomClass class = new SomeRandomClass(this);
class.someMethod();
ここの投稿では、サービスを直接インスタンス化するのは良い考えではなく、startService()
代わりに使用する必要があると述べていますが、なぜですか? このようにサービスをインスタンス化すると、サービスに直接変数があり、サービスでメソッドを呼び出すことができるようにバインドする代わりに、メソッドを呼び出すことができます。
使用してわかる唯一の利点startService()
は、Android がサービスを追跡することですが、欠点は、サービスと通信するためにサービスにバインドする必要があることです。一方、コンストラクターを直接呼び出すことで簡単に通信できますが、アクティビティ/サービスが強制終了/終了すると、「サブ」サービスも強制終了されます(アクティビティではなく他のサービスを使用しています)。
それが落胆する理由は他にありますか?