ユーザーが でいくつかのアクティビティを開始するメイン アクティビティがありますstartActivityForResult
。これは、xing バーコード スキャナーのような外部アプリケーション、または mapview やカレンダーなどの内部アクティビティである可能性があります。
問題は、startActivityForResult
メインのアクティビティを実行すると一時停止し、Android システムによって終了される可能性があることです。ユーザーが開始されたアクティビティに長時間滞在すると、これが発生し、新しいアクティビティを閉じた後にメイン アクティビティが破棄され、OnActivityResult リスナーが呼び出されないことがあります。
システムに「この一時停止したアクティビティを破棄しないでください」と伝える方法はありますか?
編集:
問題はもう少し複雑です。アプリのアーキテクチャ全体で多くの間違いを犯したのではないかと心配しています。私がやったことを説明しようとします:
メインアクティビティ ( extends TabActivity
) があり、final public class GlobalVars
GlobalVars には、プロジェクトのすべてのアクティビティで使用される多くの変数またはクラスが格納されています。:
public static boolean system_initialized = false;
public static boolean system_Onforeground = true;
メソッドで、私が設定したmain.class OnCreate
メソッドでsystem_initializedを設定し、inが設定され、inが設定されますtrue
OnResume
Onforeground = true
onPause
Onforeground = false
OnDestroy
initialized = false
アプリを起動すると、system_initialized と Onforeground は true になります。起動すると、 ActivityforResult
initialized は true のままですが、Onforeground は false に設定されます。
今、私はBroatcastReceiverを開始android.intent.action.BOOT_COMPLETED
し、AlammmanagerをpendingIntentとしてServiceで初期化しています。
現在、このサービスを使用して、メイン アクティビティで何かを行う必要があるかどうかを毎分チェックしています。アクションが発生した場合、サービスは system_initialized = true (GlobalVars 内) かどうかをチェックします。そうでない場合、サービスはアプリを開始します。それ以外の場合、サービスはハンドラー (GlobalVars 内) を使用してメイン アクティビティで Runnable を呼び出します。
これはうまく機能します。メインのアクティビティが実行されている場合、ランナブルが実行され、何かが発生します。ユーザーがActivityforResult
サービスを開始した場合、メインのアクティビティが onForeground ではなく、バックグラウンドで何かを実行していることに気付きます。しかし、メイン アクティビティが破棄された場合、サービスはメイン アクティビティを再起動しますが、それは望ましくありません ^^
かなり奇妙ですが、必要なものを別の方法で実現する方法がわかりません...