このクラスのAndroid documentationは多少混乱します。私はこのように理解しているものをはるかに私が活動を開始したときに、イベントのAndroid ActivityLifeCyleCallbacksを理解する
OnResume/OnPause
ペアが発生したと結論しているから/ユーザーによる対話のために利用可能であることを停止します。OnStart/OnStop
イベントのペアは、アクティビティの開始/停止が表示されたときに発生します。Visible != Foreground
は相互作用性を意味するためです。
この理解が正しいとすれば、イベント名がむしろ欲しいと私は思います。 OnStart/OnStop
はOnVisible/OnInVisible
と呼ばれる方が良いでしょう。 OnResume/OnPause
はOnInteractive/OnPassive
と呼ばれる方が良いでしょう。
これは、Cordovaアプリケーションで使用できるWindow.OnPause/OnResumeメソッドとどのように関連していますか?私の前提は、対応するAndroidアクティビティのライフサイクルイベントにマッピングされるということです。
私は
- ブロードキャストレシーバ
- ジオロケーションフォアグラウンド/バックグラウンドモードスイッチは、より良い活動のライフサイクルのOnStart/OnStopイベントではなく、OnResume/OnPauseイベント
- から行われていることを想定していますこのような理解に基づいて、メモリに保持されたデータは、OnPauseのDBなどに書き込まれたファイルに格納されていなければならないため、アプリケーションがインタラクティブでないとデータが使用されない可能性があります。
Feedback
がどこにある
は私が
cordova.getActivity().getApplication().
registerActivityLifecycleCallbacks(new StateMonitor());
を発行することにより、アクティビティのライフサイクルイベントの監視を開始私のカスタムコルドバのプラグイン
import android.app.Activity;
import android.app.Application.ActivityLifecycleCallbacks;
import android.os.Bundle;
public class StateMonitor implements ActivityLifecycleCallbacks
{
public static int isVisible = 0;
public static int isInFG = 0;
public static boolean isAppInForeground()
{Feedback.postBackInfo("In FG:" + isInFG);return isInFG > 0;}
public static boolean isAppVisible(){return isVisible > 0;}
public void onActivityCreated(Activity activity,Bundle bundle){}
public void onActivityDestroyed(Activity activity){}
public void onActivityResumed(Activity activity)
{
isInFG++;
Feedback.postBackInfo("Resumed:" + isInFG);
}
public void onActivityPaused(Activity activity)
{
isInFG--;
Feedback.postBackInfo("Paused");
}
public void onActivitySaveInstanceState(Activity activity,Bundle outState)
{}
public void onActivityStarted(Activity activity)
{Feedback.postBackInfo("started");isVisible++;}
public void onActivityStopped(Activity activity){isVisible--;}
}
の一環として、次のクラスを作成するために、この理解を使用しましたヘルパークラス私はプラグインで内部的に使用して、サーバにログを記録したりウェブブラウザにリアルタイムで表示するためのメッセージをポストバックするなどの作業を行います。プラグインの
public void initialize(CordovaInterface cordova, CordovaWebView webView)
方法から
。これは、すぐに問題アップスロー:
- これらのイベントは、私が最初に
- は推測する私のアプリケーションを起動したときに発射開始されませんが、彼女は
registerActivityLifecycleCallbacks
を呼び出すことによって、以来、初期のOnStart/OnResumeイベントを監視する「遅すぎる」ということですそのコールが行われた時刻 -Plugin.initialize
- これらのイベントは「既に発生しました」。
これまでコメントして解決策を提供することができた人は、これまで誰でも義務づけられています。
関連するJavaコードをハッキングするか、実行時にJSを使用してクラスを追加する方法について説明できますか? – DroidOS
はい、Javaクラスをハックしました。 ActivityLifecycleCallbacksがAPI 14 Ice Creamに追加されました。私の推測では、cordova.getActivity()。getApplication()はあなたにそのオブジェクトの "古い"バージョンをもたらすでしょう。 – pashakym