В вашем случае нет необходимости добавлять какие-либо дополнительные переменные, измените код на.
public class MainActivity extends Activity {
private final int[] SOUNDS = {R.raw.blizzardlowquaility, R.raw.onebite_dansgaming, R.raw.nagur_dansgaming};
private final int LOW = 0;
private final int HIGH = 3;
private MediaPlayer mMediaPlayer;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageButton Testy = findViewById(R.id.imageButton);
Testy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mMediaPlayer == null) {
int random = (new Random()).nextInt(HIGH - LOW) + LOW;
mMediaPlayer = MediaPlayer.create(getApplicationContext(), SOUNDS[random]);
mMediaPlayer.start();
} else {
mMediaPlayer.stop();
mMediaPlayer.release();
mMediaPlayer = null;
}
}
});
}
}
Это смесь. Очевидно, что такие вещи, как winforms, в значительной степени являются обертками вокруг функциональности Win32 (или смеси обоих миров), но WPF намного более управляем (с точки зрения фактического управляющего кода), под капотом, как отмечает Мэш, он может использовать DirectX для рендеринг). Аналогично, такие вещи, как доступ к файлу / сети, являются (по необходимости) обертками вокруг объектов ОС, как и объекты неуправляемой блокировки, такие как Mutex
, но многие другие вещи управляются на 100%.
Так что это не так. простой ответ.
(правка) Кроме того, имейте в виду, что «.NET» - очень расплывчатый термин; Compact Framework, Micro Framework, Silverlight и т. Д. Могут иметь различные реализации, отличные от win32.
Обновление: поняла, что я ответила на неправильный вопрос (вы сказали, что среда выполнения не библиотека классов) ... о, ну, в любом случае, я оставлю болванку ниже
Это зависит от часть библиотеки:
Это просто из-за возни с Reflector. Очевидно, что в качестве COM-сервера Microsoft CLR также сильно зависит от win32.
.NET-приложение - это просто еще один процесс Win32, поэтому в этом нет никакой магии, и, очевидно, он будет использовать операционную систему подчеркивания. Даже библиотеки .NET в значительной степени используют Win32.
Примеры:
Управление памятью осуществляется внутренне для управляемого кода, но для сам процесс это обрабатывается просто как и любой другой процесс Win32.
В настоящее время управляемые темы также реализован как потоки ОС.
Да, он вызывает функции win32 внутренне. Например, метод OpenRead в классе File содержит:
return new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
и в конечном итоге он вызовет:
SafeFileHandle handle = CreateFile(lpFileName, dwDesiredAccess, dwShareMode, securityAttrs, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
, которая является нативной функцией win32, глубоко в методе.
В некоторых случаях (в большинстве случаев, может быть, я не отражал всю структуру) .NET Framework делает вызовы win32. Большинство элементов управления - это просто элементы управления win32, снабженные несколькими новыми функциями.
Mono является реализацией среды выполнения .net, и она определенно не соответствует вызовам функций win32 (по крайней мере, в Linux)
Я полагаю, ваш вопрос имел в виду Внедрение Microsoft среды выполнения .net.
Он вызывает .NET API, как и все приложения Windows. Но это больше, чем просто обертка или карта, более точно она описывается как абстракция.