2017-05-16 5 views
2

ネイティブメールアプリにコードネーム1アプリから委任しています。コードネーム1つのアプリをバックグラウンドに送るか、少なくともコードの実行を停止することをこの呼び出しが期待していました。ユーティリティは回復していますが、これは起こっていません。ライフサイクルメソッド(停止/開始)は呼び出されず、委譲に続くコードはまだ実行されています。ネイティブアプリに委任した後のコードネーム1アプリの制御を回復

ユーザーが電子メールアプリケーションを終了するまで、コードネーム1のアプリケーションですべての実行を停止し、コードネーム1のアプリケーションが制御を回復したときに何らかの方法で通知されます。

私はそれを見つけるための単純で直接的な方法があるはずですが、私はそれを見つけることができません。

助けてください!

可能であれば、アプリケーションを強制的に最小化しないことをお勧めします。他のアプリに移動するとき

答えて

1

stop()start()を起動する必要がありますが、彼らはので、あなたのコードは、この擬似コードのように見えると仮定するとEDTで非同期的に呼び出されます。

callNativeEmailApp(); 
doSomeStuff(); 

その後doSomeStuff()がすぐに起こるとstop()ますまだEDTスレッドで待機しているため、まだ呼び出されません。場合にのみ、メールアプリが起こる可能性がある

callNativeEmailApp(); 
Display.getInstance().callSerially(() -> doSomeStuff()); 

をしかし、それはマイナーなプラットフォームの動作に依存しているとして、それが問題になるかもしれませんが、しばらく時間がかかる場合があります電子メールアプリを起動し、stop()を呼び出す:あなたはstop()を使用して呼び出さ取得する機会を与えることができますコントロールを得る。

setFlagThatWeShouldBeInEmailApp(); 
callNativeEmailApp(); 

その後stop()start()にあなたは、このようなフラグをテストすることができますし、そこにロジックを記述します。

より良いアプローチは、このような何かを行うことです。クラッシュやキャンセルのケースに対処する必要があるため、これは「壊れやすい」ことに注意してください。

+0

私はネイティブの電子メールアプリケーションの委任に続いてコードを削除したが、stop()とstart()は呼び出されていないので、電子メールアプリが開きますが、コードネーム1のアプリに戻ると何も起こらないように動作します。これは予想される動作ですか?ネイティブアプリへの委任中にアプリがスリープ状態に入ることが保証されていますか? Android 6.0.1でLenovo K6ノートでアプリをテストしています。 –

+1

この場合、 'stop()'と 'start()'が呼び出されることを保証する必要があります。私はこれが確かに事実であることを確認するためにロギングを使うことを勧めます。 'start()'メソッドの最初のコードは、最後のアクティブなフォームを表示するようにアプリケーションのロジックを中断させる可能性があることに注意してください。あなたはこの動作に注意する必要があります。 –

+0

私が手動でアプリケーションを最小限に抑えている場合、stop()/ start()が呼び出され、アプリケーションが正常に再開します。しかし、ネイティブの電子メールアプリケーションに委任した後、コードネーム1のアプリケーションがスリープ状態に入るという兆候はありません。私はそれがstop()/ start()サイクルを経由しないことをかなり確信しています。これはバグか、私が使用している電話機/プラットフォーム/コードの組み合わせに起因する不思議な挙動ですか? –

関連する問題