Хорошо, я пытаюсь написать провайдера Live Folder, который между вызовом и созданием папки сначала запрашивает у пользователя некоторые параметры.Это работает, пока я не дошёл до того, чтобы попытаться дождаться опций перед созданием папки.Я почти уверен, что это связано с тем, как я пытаюсь ждать активности опций.
Я пытаюсь ждать опций через семафор с 1 слотом.Вот мой основной полупсевдокод:
package mypackage
import <all-my-imports>
public class Folder extends Activity {
Intent getOptions = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Intent intent = getIntent();
final String action = intent.getAction();
if (LiveFolders.ACTION_CREATE_LIVE_FOLDER.equals(action)) {
try {
CoreLib.Blocker().acquire();
getOptions = new Intent(this, Options.class);
startActivityForResult(getOptions, 0);
CoreLib.Blocker().acquire();
if(getOptions == null) {
throw new Exception("Live folder canceled.");
}
<create-live-folder-from-options>
setResult(RESULT_CANCELED);
finish();
} catch (Exception e) {
CoreLib.showToast(e.getMessage(), Toast.LENGTH_LONG);
setResult(RESULT_CANCELED);
finish();
}
} else {
setResult(RESULT_CANCELED);
finish();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
getOptions = intent;
CoreLib.Blocker().release();
}
}
CoreLib.Blocker()
- это семафор, который инициализируется так: new Semaphore(1, true)
.
Я думал, что он получит семафор, затем запустит действие Options, затем попытается снова получить семафор, который заблокирует его, пока не вернется действие Options, где он затем вызовет release
в onActivityResult
, а затем onCreate
продолжится.Кажется, что он не работает ... просто зависает при втором захвате и все.
Как лучше всего получить параметры от пользователя до создания папки, чтобы я могиспользовать эти опции при создании папки?
ОБНОВЛЕНИЕ: Я также сейчас пытался заменить всю мою маленькую логику семафора пустой while
петлей после Вызов действия Options, ожидание общей логической переменной, которая будет перевернута действием Options, когда она будет завершена.Но это также отправляет приложение в забвение прежде, чем оно когда-либо сможет перейти к действию Options.