1

ユーザーが でいくつかのアクティビティを開始するメイン アクティビティがあります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が設定されますtrueOnResumeOnforeground = trueonPauseOnforeground = falseOnDestroyinitialized = false

アプリを起動すると、system_initialized と Onforeground は true になります。起動すると、 ActivityforResultinitialized は true のままですが、Onforeground は false に設定されます。

今、私はBroatcastReceiverを開始android.intent.action.BOOT_COMPLETEDし、AlammmanagerをpendingIntentとしてServiceで初期化しています。

現在、このサービスを使用して、メイン アクティビティで何かを行う必要があるかどうかを毎分チェックしています。アクションが発生した場合、サービスは system_initialized = true (GlobalVars 内) かどうかをチェックします。そうでない場合、サービスはアプリを開始します。それ以外の場合、サービスはハンドラー (GlobalVars 内) を使用してメイン アクティビティで Runnable を呼び出します。

これはうまく機能します。メインのアクティビティが実行されている場合、ランナブルが実行され、何かが発生します。ユーザーがActivityforResultサービスを開始した場合、メインのアクティビティが onForeground ではなく、バックグラウンドで何かを実行していることに気付きます。しかし、メイン アクティビティが破棄された場合、サービスはメイン アクティビティを再起動しますが、それは望ましくありません ^^

かなり奇妙ですが、必要なものを別の方法で実現する方法がわかりません...

4

1 に答える 1

1

しかし、自分の活動に戻ると、それは再作成されます。インスタンスやその他の方法
を使用して、アクティビティの状態を保存するだけです。onSaved

onLowMemory取得したアプリのコールバックにチェックを入れることもできます。

SOのリンクをたどってください。
役立つかもしれません。

アクティビティを強制終了する DVM の処理

于 2012-05-30T09:39:49.290 に答える