Мое приложение имеет свою информацию, хранящуюся в ее службе, а в onCreate() привязывается к ней, чтобы проверить, какое состояние обслуживания загружает информацию. Я бы сказал, что это упростит ориентацию на изменение, потому что он восстановит свое состояние от службы при воссоздании. Но моя проблема в том, что когда вызывается onDestroy, он вызывает unbindService, но onCreate вызывается до onServiceDisconnect, что вызывает некоторые проблемы. Вот некоторые из моих методов:Проблема с привязанным сервисом по ориентации изменена
На активность:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyService.log("Activity onCreate()");
setContentView(R.layout.activity_layout);
actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setDisplayShowTitleEnabled(false);
drawerlayout = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerlayout.setDrawerShadow(R.drawable.drawer_shadow, Gravity.LEFT);
// activity sendo criada pela primeira vez e não por mudança de
// orientação
registerReceivers();
// cancelaNotificacao(R.drawable.ic_launcher);
Intent it = new Intent(this, MyService.class);
if (!MyService.RUNNING) {
startService(it);
}
if (!bindService(it, this, 0)) {
mensagemErro("Erro!",
"Não foi possível conectar ao service. Fechando app.");
finish();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceivers();
unbindService(this);
}
@Override
public void onServiceConnected(ComponentName name, IBinder binderservice) {
MyService.log("Activity onServiceConnected");
LocalBinder binder = (LocalBinder) binderservice;
this.service = binder.getService();
carregaRadio();
if (MyService.bot != null && MyService.bot.isConnected()) {
carregaChatdoService();
selectTab(TITLE_TAB_CHAT);
} else {
carregaLogin();
selectTab(TITLE_TAB_RADIO);
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
service = null;
}
О службе:
public class LocalBinder extends Binder {
public MyService getService() {
// Return this instance of LocalService so clients can call public
// methods
return MyService.this;
}
}
@Override
public IBinder onBind(Intent arg0) {
log("Service Bind.");
BOUND = true;
return mBinder;
}
@Override
public boolean onUnbind(Intent intent) {
log("Service Unbind.");
BOUND = false;
boolean stopserviceflag = true;
// Se nem o bot do irc e nem o player estao ativos, o service pode parar
// tambem
if (bot != null && bot.isConnected()) {
stopserviceflag = false;
}
if (playerStarted) {
stopserviceflag = false;
}
if (stopserviceflag) {
log("Service Stop.");
stopSelf();
}
return super.onUnbind(intent);
}
Я думаю, если мой onServiceDisconnected бы назвал, прежде чем OnCreate он будет работать, но искренне не знаю.
Любая помощь приветствуется.
onCreate все еще вызывается сразу после onDestroy() и до onServiceDisconnected. В Debug я вижу, что метод onUnbind() вызван только после onStart(), что смущает все ... –
С удовольствием разработал первое приложение в мире, не совместимое с ландшафтной ориентацией :) –