2015-04-27 3 views
0

Предположим, я привязан к службе и получил ссылку на объект через объект IBinder. Я сохраняю ссылку в объекте Activity как поле. Затем я отвязываю службу, вызывающую ее разрушение. Что означает ссылка на Службу в Деятельности после разрушения Сервиса?Что происходит с объектом службы после его уничтожения

+0

вы получаете мертвый объект – pskink

ответ

1

Ничего. Это классическое из связанного состояния, и если вы обращаетесь к нему, поведение непредсказуемо, но оно никогда не бывает хорошим.

=====

обновление

Пожалуйста, посмотрите на этот пример (взяты из here):

public class BindingActivity extends Activity { 
LocalService mService; 
boolean mBound = false; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
} 

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

@Override 
protected void onStop() { 
    super.onStop(); 
    // Unbind from the service 
    if (mBound) { 
     unbindService(mConnection); 
     mBound = false; 
    } 
} 

/** Called when a button is clicked (the button in the layout file attaches to 
    * this method with the android:onClick attribute) */ 
public void onButtonClick(View v) { 
    if (mBound) { 
     // Call a method from the LocalService. 
     // However, if this call were something that might hang, then this request should 
     // occur in a separate thread to avoid slowing down the activity performance. 
     int num = mService.getRandomNumber(); 
     Toast.makeText(this, "number: " + num, Toast.LENGTH_SHORT).show(); 
    } 
} 

/** Defines callbacks for service binding, passed to bindService() */ 
private ServiceConnection mConnection = new ServiceConnection() { 

    @Override 
    public void onServiceConnected(ComponentName className, 
      IBinder service) { 
     // We've bound to LocalService, cast the IBinder and get LocalService instance 
     LocalBinder binder = (LocalBinder) service; 
     mService = binder.getService(); 
     mBound = true; 
    } 

    @Override 
    public void onServiceDisconnected(ComponentName arg0) { 
     mBound = false; 
    } 
}; 

}

Пожалуйста, обратите внимание на ServiceConnection.

+0

Есть ли способ проверить, не ли он связан? –

+0

На самом деле, вы никогда не должны сохранять экземпляр в IBinder, и вы можете просто использовать логический флаг для представления, связаны ли вы или нет. –

+0

Не следует сохранять экземпляр? Итак, как мне позже связаться с сервисом, к которому я привязался? –