В Python потоки довольно сложны и работают в одной и той же куче памяти. Потоки в основном работают одновременно, то есть несколько потоков чередуются вместе, так что только при запуске выполняется одновременно, и они вместе работают альтернативно в очень короткие промежутки времени (учитывая, что им нужен доступ к интерпретатору).
Когда вы переводите поток в спящий режим, он в основном использует базовые функции спящего режима системы и блокирует все операции над ним. Тем не менее, другие потоки, безусловно, работоспособны. Таким образом, когда вы говорите, что THREAD1 находится в спящем режиме до того, как он собирался получить доступ к глобальной переменной, очевидно, что другие потоки будут использовать переменную, потому что они работают, а THREAD1 - нет.
Как только THREAD1 пробуждается, при необходимости он получает GIL и, таким образом, получает доступ к глобальной переменной. Так как он снова чередуется с другими потоками, из-за параллелизма он получает немедленный доступ к глобальной переменной после активации. Если бы другие потоки использовали его, они бы отказались от доступа до того, как THREAD1 начал операции.
Можно использовать startActivityForResult
, передающий в Намерении, которое описывает действие, с которым Вы хотите, чтобы завершенный и и источник данных выполнил действие.
К счастью для Вас, Android включает Действие для выбора вещей: Intent.ACTION__PICK
и источник данных, содержащий изображения: android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI
для изображений на локальном устройстве или android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI
для изображений на SD-карте.
Вызов startActivityForResult
передача в действии выбора и изображениях Вы хотите, чтобы пользователь выбрал из подобного это:
startActivityForResult(new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI), SELECT_IMAGE);
Затем переопределение onActivityResult
для прислушиваний к пользователю, сделавшему выбор.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SELECT_IMAGE)
if (resultCode == Activity.RESULT_OK) {
Uri selectedImage = data.getData();
// TODO Do something with the select image URI
}
}
, После того как у Вас есть изображение Uri, которого можно использовать его, чтобы получить доступ к изображению и сделать независимо от того, что необходимо сделать с ним.