Android - это Сервис-ориентированная архитектура , что означает, что все приложения на устройстве состоят из компонентов, которые запрашивают работу, выполняемую другими компонентами, используя сообщения высокого уровня, называемые Intents, Несмотря на то, что за кулисами Intents, которые охватывают приложения, отправляются с использованием Binder, который опирается на особый вариант Android совместно используемой памяти , цель состоит в том, чтобы разработчики приложений блаженно не знали о реализации. Единственное требование - когда компонент хочет передать объект вместе со своим «намерением» запросить работу у другого компонента, который живет в другом процессе, этот объект должен быть parcelable (думаю, сериализуемым). Кроме того, чтобы приложения могли использовать Содержимое других приложений, оно должно быть опубликовано в файле манифеста с использованием Фильтр намерений .
Приложение, которое хотело бы запустить отображение веб-страницы, имело бы код, который выглядит следующим образом:
public class OpenInternet extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
((Button) findViewById(R.id.OpenInternetButton))
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(Intent.ACTION_VIEW, Uri
.parse("http://www.google.com"));
startActivity(i);
}
});
}
}
Другое приложение, которое могло обслуживать это намерение путем отображения веб-страницы, определило бы следующие фильтры намерений в своем манифесте, чтобы оно могло перехватить намерение, отправленное другим приложением:
<!-- For these schemes were not particular MIME type has been
supplied, we are a good candidate. -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:scheme="about" />
<data android:scheme="javascript" />
</intent-filter>
<!-- For these schemes where any of these particular MIME types
have been supplied, we are a good candidate. -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:scheme="inline" />
<data android:mimeType="text/html"/>
<data android:mimeType="text/plain"/>
<data android:mimeType="application/xhtml+xml"/>
<data android:mimeType="application/vnd.wap.xhtml+xml"/>
</intent-filter>
Помимо использования Intents, вы можете создавать объекты с прокси-объектами, используя AIDL , которые позволяют выполнять удаленные вызовы процедур через границу процесса.
Возможно, вам не нужно беспокоиться о том, как libc выполняет системные вызовы, так как вы работаете внутри виртуальной машины и несколько уровней удалены из них. Что касается «нормального» IPC, у вас есть сокеты, но у вас нет общей памяти System V , так как она была сочтена проблемной и удалена.