私はstart
メソッドを持つフレームワークをカプセル化したAndroidのサービスを持っています。サービスはこのような何かに帰着、多くのものが省略:アプリケーション起動時のサービスのバインドと起動
public class MyServiceBridge implements ServiceConnection {
private boolean started = false;
private boolean bound = false;
private MyService myService;
public MyServiceBridge(Context context){
this.context = context;
}
public void bindService(){
Intent intent = new Intent(getContext(), MyService.class);
getContext().bindService(intent, this, getContext().BIND_AUTO_CREATE);
getContext().startService(intent);
}
// Here's a sample call, and the one that is relevant
public void start(Map<String, Object> options){
setOptions(options);
if(bound == true){
getMyService().start(options);
}
else{
started = true;
}
}
}
が、私は実行するために、ブリッジのstart
メソッドを呼び出します。
public class MyService extends Service {
private IBinder thisBinder;
public MyService(){
thisBinder = new LocalBinder();
}
@Override
public IBinder onBind(Intent intent) {
return thisBinder;
}
public void start(Map<String, Object> options)
{
getDriverManager().start(options);
}
}
は、私はまた、サービスへの呼び出しを行うブリッジクラスを持っていますサービス。この特定の状況(これまでのところ)を除いて、これはうまく動作します。 MyApplication
クラスはonCreate
上でブリッジのstartメソッドを呼び出します。
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
getServiceBridge().start(null);
}
}
これ、according to the docsは、「アプリケーションが作成されている(コンテンツプロバイダを除く)すべての活動、サービス、または受信機のオブジェクトの前に、起動したときに呼び出されます。」されます。実際には、サービスが開始されず、代わりにアプリケーションを終了すると(奇数、少なくとも)サービスが開始されるので、そうであるように見えます。これは、アクティビティのonCreate
メソッドへの呼び出しを移動すると機能しますが、サービスを停止することができ、サービスがアプリの生涯にわたって実行されるため、これは理想的ではありません。つまり、アプリケーションの起動時にサービスが開始され、アプリケーションが終了すると停止する必要があります。これは理にかなっていますか?これを行う別の方法がありますか?
'onCreate'メソッドは、Applicationクラスと呼ばれるのですか? –
はい、メソッドが呼び出されます!しかし、これと@ vanste25の答えは、サービスがバックグラウンドで実行されていることと関係があるかもしれないことを認識させました。私は、このメソッドは、私がアプリケーションを実行する2回目に呼ばれるように見えないので、これを言う。 –