好的,我正在尝试编写一个 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
调用继续。虽然它似乎不起作用......只是挂断了第二次收购,就是这样。
在创建文件夹之前从用户那里获取选项的最佳方法是什么,以便我可以在创建文件夹时使用这些选项?
更新:我现在还尝试在调用 Options 活动后while
用一个空循环替换我的整个小信号量逻辑,等待一个共享的布尔变量,该变量将在 Options 活动完成时翻转。但这也会让应用程序在进入 Options 活动之前被遗忘。