さて、私は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)
。
私の考えでは、セマフォを取得してからオプションアクティビティを起動し、セマフォを再度取得しようとします。これにより、オプションアクティビティが戻るまでロックされ、で、が呼び出されますrelease
。継続する。しかし、うまくいかないようです...2回目の取得で電話を切るだけです。onActivityResult
onCreate
フォルダを作成する前にユーザーからオプションを取得して、フォルダの作成にそれらのオプションを使用できるようにするための最良の方法は何ですか?
更新: Optionsアクティビティを呼び出した後while
、小さなセマフォロジック全体を空のループに置き換えて、終了時にOptionsアクティビティによって反転される共有ブール変数を待機するようにしました。ただし、これにより、アプリがオプションアクティビティに到達する前に、アプリが忘却されます。