2017-07-19 5 views
0

このクラスのAndroid documentationは多少混乱します。私はこのように理解しているものをはるかに私が活動を開始したときに、イベントのAndroid ActivityLifeCyleCallbacksを理解する

  • OnResume/OnPauseペアが発生したと結論しているから/ユーザーによる対話のために利用可能であることを停止します。
  • OnStart/OnStopイベントのペアは、アクティビティの開始/停止が表示されたときに発生します。 Visible != Foregroundは相互作用性を意味するためです。

この理解が正しいとすれば、イベント名がむしろ欲しいと私は思います。 OnStart/OnStopOnVisible/OnInVisibleと呼ばれる方が良いでしょう。 OnResume/OnPauseOnInteractive/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 - これらのイベントは「既に発生しました」。

これまでコメントして解決策を提供することができた人は、これまで誰でも義務づけられています。

答えて

0

私がそれを動作させることができる唯一の方法は、このクラスをCordovaアプリケーションのMainActivityの中に追加することです。それはあなたのプラグインの外にあります。 他には何も働いていませんでした。

+0

関連するJavaコードをハッキングするか、実行時にJSを使用してクラスを追加する方法について説明できますか? – DroidOS

+0

はい、Javaクラスをハックしました。 ActivityLifecycleCallbacksがAPI 14 Ice Creamに追加されました。私の推測では、cordova.getActivity()。getApplication()はあなたにそのオブジェクトの "古い"バージョンをもたらすでしょう。 – pashakym

関連する問題