2014-05-16 1 views
2

Мое приложение имеет свою информацию, хранящуюся в ее службе, а в 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 он будет работать, но искренне не знаю.

Любая помощь приветствуется.

ответ

0

Привязать услугу в ActivityonStart и unbind the service в onStop. Это исправит вас в изменении ориентации.

@Override 
protected void onStart() { 
    super.onStart(); 
    // Bind to LocalService 
    Intent intent = new Intent(this, YourService.class); 
    bindService(intent, mConnection, Context.BIND_AUTO_CREATE); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    // Unbind from the service if already bound . 
    // mBound will be true if service connection is established when onServiceConnected is called 
    if (mBound) { 
     unbindService(mConnection); 
     mBound = false; 
    } 
} 

Это позволит убедиться, что service является bound с Activity только тогда, когда Activity находится на переднем плане (видимой и интерактивной для пользователя).

+0

onCreate все еще вызывается сразу после onDestroy() и до onServiceDisconnected. В Debug я вижу, что метод onUnbind() вызван только после onStart(), что смущает все ... –

+0

С удовольствием разработал первое приложение в мире, не совместимое с ландшафтной ориентацией :) –

 Смежные вопросы

  • Нет связанных вопросов^_^