Допустим, я привязался к службе и получил ссылку на нее через объект IBinder. Я храню ссылку в своем объекте Activity как поле. Затем я отвязываю службу, вызывая ее уничтожение. К чему относится ссылка на Службу в Деятельности после уничтожения Службы?
Что происходит с объектом службы после его уничтожения
comment
вы получаете мертвый объект
- person pskink   schedule 27.04.2015
Ответы (1)
Ничего. Это классическое не связанное состояние, и если вы получите к нему доступ, поведение будет непредсказуемым, но никогда не будет хорошим.
=====
Обновить
Посмотрите на этот пример (взято из здесь):
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;
}
};
}
Обратите внимание на Сервисное соединение.
person
Royi Benyossef
schedule
27.04.2015
Есть ли способ проверить, не выходит ли он за пределы?
- person f.khantsis; 27.04.2015
На самом деле нет, вам все равно никогда не следует сохранять экземпляр в IBinder, и вы можете просто использовать логический флаг, чтобы указать, привязаны вы или нет.
- person Royi Benyossef; 27.04.2015
Не следует сохранять экземпляр? Итак, как мне позже связаться со службой, к которой я привязан?
- person f.khantsis; 27.04.2015
Хорошо, я думаю, что теперь я лучше понимаю ваш вопрос, обновляю свой ответ - пожалуйста, посмотрите.
- person Royi Benyossef; 27.04.2015
Хорошо спасибо. Слушайте, это немного не по теме, но я только сейчас начинаю Android-разработку и это очень запутанно, хотя я приличный Java-программист. Можете ли вы порекомендовать мне действительно хороший учебник/пример программы для оплаты/что-нибудь, чтобы облегчить обучение?
- person f.khantsis; 27.04.2015