У меня есть служба в Android, которая инкапсулирует фреймворк с методом 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);
}
}
У меня также есть класс моста, который звонит в службу:
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
, чтобы запустить службу. Это отлично работает, за исключением этой конкретной ситуации (пока). Класс MyApplication
вызывает метод start моста для onCreate
:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
getServiceBridge().start(null);
}
}
Это согласно документам "Вызывается, когда приложение запускается до того, как будут созданы какие-либо действия, службы или объекты-приемники (за исключением поставщиков контента).". Действительно, похоже, что это так, потому что служба не запускается, а вместо этого запускается, когда я закрываю приложение (по крайней мере, странно). Это работает, если я передам вызов методу onCreate
действия, но это не идеально, потому что я также могу остановить службу, и я хочу, чтобы служба работала в течение всего времени существования приложения. То есть служба должна запускаться при запуске приложения и останавливаться при его завершении. Имеет ли это смысл? Есть ли другой способ сделать это?
onCreate
вызывается метод или нет класса Application? - person ρяσѕρєя K   schedule 22.06.2016