0

У меня возникла проблема с привязкой к сервису, которая дает мне орехи.Android - Мой сервис onunbind, но без привязки снова

У меня есть действие, которое связывает службу, и часто, когда пользователь входит и выходит из этой деятельности.

Проблема возникает, когда пользователь уходит в первый раз от активности, которая отключает службу и когда она снова заходит, не связывается снова.

Активность вызывает обязательную службу таким образом:

@Override 
protected void onStart() { 
    super.onStart(); 
    Intent intent = new Intent(this, CService.class); 
    intent.putExtra("id_local", (String) getIntent().getExtras().get("id_local")); 
    intent.putExtra("id_send", (String) getIntent().getExtras().get("id_send")); 

    bindService(intent, mConnection, Context.BIND_AUTO_CREATE); 
    registerReceiver(uiUpdated, new IntentFilter("SERVER_MESAGE")); 
    mBound = true; 
} 

Если mConnection определяется таким образом:

private ServiceConnection mConnection = new ServiceConnection() { 

    @Override 
    public void onServiceConnected(ComponentName className, 
            IBinder service) { 
    CService.LocalBinder binder =(CService.LocalBinder) service; 
     mService = binder.getService(); 
     Log.d("Service", "onServiceConnected"); 
     mBound = true; 
    } 

    @Override 
    public void onServiceDisconnected(ComponentName arg0) { 
     Log.d("Service", "onServiceDisconnected"); 
     mBound = false; 
    } 
}; 

И в onStop я unbindService:

@Override 
protected void onStop() { 
    if (mBound) { 
     Log.d("ActivityStop", "Stoping activity"); 
     unregisterReceiver(uiUpdated); 
     unbindService(mConnection); 
     mBound = false; 
    } 
    super.onStop(); 
} 

onBind в сервисе е является то, что один:

@Override 
public IBinder onBind(Intent intent) { 

    final String id_local = intent.getStringExtra("id_local"); 
    final String id_send = intent.getStringExtra("id_send"); 

    if (!misatgesList.isEmpty()) { 
     misatgesList.clear(); 
    } 

    mBackGroundTimer.schedule(new TimerTask() { 
     @Override 
     public void run() { 

      String serverResult = restRecive(id_local, id_send, 
         misatgesList.size()); 
      if (serverResult != null) { 
       misatgesList.addAll(procesMisatges(serverResult, 
          id_local)); 
       Intent i = new Intent("SERVER_MESAGE"); 
       i.putExtra("recive", serverResult); 
       sendBroadcast(i); 
      } 
     } 
    }, 0, 1000); 


    return mBinder; 
} 

И onUnBind является то, что один:

@Override 
public boolean onUnbind(Intent intent) { 
    mBackGroundTimer.cancel(); 
    misatgesList.clear(); 
    Log.d("ServiceOnUnBind", "ServiceOnUnBind"); 
    //stopSelf(); 
    return super.onUnbind(intent); 
} 

Так что мой вопрос будет, как я могу связать снова службу, когда активность снова идет в? Или что мне делать, чтобы сохранить привязку до тех пор, пока пользователь не включится в эту активность?

ответ

3

Я нашел решение!

Что я имел в виду, так это, как позвонить еще onBind. Это делается с помощью onRebind, который позволит вам снова позвонить onBind.

Итак, я создал onRebind:

@Override 
    public void onRebind(Intent intent) { 
     super.onRebind(intent); 
    } 

Кроме того, для onRebind на работу, вы должны превратить возвращение в onUnbind к true.

@Override 
public boolean onUnbind(Intent intent) { 
    mBackGroundTimer.cancel(); 
    misatgesList.clear(); 
    Log.d("ServiceOnUnBind", "ServiceOnUnBind"); 
    //return super.onUnbind(intent); 
    return true; 
} 

Для более подробного объяснения, проверить есть: Bound Services

0

Использование getApplicationContext (API) при привязке к службе от деятельности, как показано ниже:

getApplicationContext().bindService(intent, mConnection, Context.BIND_AUTO_CREATE); 

getApplicationContext возвращает глобальный контекст приложения - в отличие от других контекстов является то, что, например, контекст деятельности может быть уничтожен (или иным образом недоступны) Android, когда ваша деятельность заканчивается. Контекст приложения остается доступным все время, пока ваш объект приложения существует (который не привязан к определенному действию)

+0

Благодаря ответ, я пытался добавить 'getApplicationContext()' в коде (в 'OnStart()' деятельности и в 'onStop()' потому что есть я делаю 'unbindService()') и все еще не работаю ... – ALanao

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

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