В «developer docs for Bound Services» приведен следующий пример кода «Расширение класса связующего» в разделе «Создание связанной службы». Следующий фрагмент кода (я удалил ненужные биты) дается в котором Service
возвращает IBinder
из его onBind()
метода:Android Bound Services: Почему мы приводим этот экземпляр IBinder в экземпляр IBinder?
public class LocalService extends Service {
// Binder given to clients
private final IBinder mBinder = new LocalBinder();
...
/**
* Class used for the client Binder. Because we know this service always
* runs in the same process as its clients, we don't need to deal with IPC.
*/
public class LocalBinder extends Binder {
LocalService getService() {
// Return this instance of LocalService so clients can call public methods
return LocalService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
return mBinder; //**********************************************************
}
...
}
Тогда в нашем клиенте, мы получаем mBinder
объекта (который является экземпляром LocalBinder
) в методе onServiceConnected()
ServiceConnection
. Мой вопрос в том, почему мы пытаемся привести экземпляр LocalBinder
в качестве argument
в onServiceConnected()
в экземпляр LocalBinder
в заявлении LocalBinder binder = (LocalBinder) service;
?
public class BindingActivity extends Activity {
LocalService mService;
boolean mBound = false;
...
/** 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;
}
};
...
}
«Язык статически типизирован, если тип переменной известен во время компиляции. Это на практике означает, что вы, как программист, должны указать тип каждой переменной». [Ссылка] (http://stackoverflow.com/questions/1517582/what-is-the-difference-between-statically-typed-and-dynamically-typed-languages) - Теперь я не мог понять, как это связано с статическая типизация. – Solace
@Zarah т.к. разлив. Вы не используете динамические языки (просто не выполняете). Когда вы бросаете, вы говорите, что хотите переопределить информацию о типе, доступную во время компиляции, потому что вы знаете лучше. Вы динамичны. – dcow
Большое спасибо. – Solace