該類的Android documentation有點令人困惑。從我因而被理解到目前爲止,我已經得出結論,活動開始時發生瞭解Android ActivityLifeCyleCallbacks
- 的
OnResume/OnPause
事件對/停止對用戶交互可用。 OnStart/OnStop
這對事件發生在活動開始/停止可見時。因爲後者意味着交互性。
如果這種理解是正確的,那麼它讓我感到事件名稱是相當想要的。 OnStart/OnStop
本來可以稱爲OnVisible/OnInVisible
。 OnResume/OnPause
本來可以稱爲OnInteractive/OnPassive
。
這如何與Cordova應用程序中的Window.OnPause/OnResume方法配合使用?我的假設是他們映射到相應的Android活動生命週期事件。
基於這樣的認識,我假設
- 廣播接收機
- 地理位置前景/背景模式開關更好地從活動週期完成的OnStart /調用OnStop事件,而不是的onResume /的onPause事件
- 保存在內存中的數據應該放在OnPause上的文件/寫入數據庫等,以減少應用程序的內存佔用,因爲如果應用程序不是交互式的,那麼這些數據不太可能被使用。
我用這個認識創建下面的類作爲我的自定義科爾多瓦插件
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--;}
}
我開始通過發行
cordova.getActivity().getApplication().
registerActivityLifecycleCallbacks(new StateMonitor());
監測活動生命週期事件的一部分,其中Feedback
是助手類我在插件內部使用,例如將消息發回我的服務器以便在我的Web瀏覽器中進行實時記錄和顯示。
從插件的
public void initialize(CordovaInterface cordova, CordovaWebView webView)
方法。這立即引發了一個問題:
- 這些事件不會開始射擊,當我第一次啓動該應用程序
- 我猜她是在調用
registerActivityLifecycleCallbacks
是「亡羊補牢」來監視初步的OnStart /的onResume事件,因爲通過那次通話的時間 - 從Plugin.initialize
- 這些事件已經「已經發生」。
我非常感謝以前曾在這裏的人,他們可能會發表評論並提供解決方案。
你能解釋一下你如何去添加類 - 通過黑客相關的Java代碼或在運行時通過JS ...? – DroidOS
是的,黑客入侵了一個Java類。 ActivityLifecycleCallbacks添加到API 14冰淇淋中。我的猜測是cordova.getActivity()。getApplication()會爲您帶來該對象的「舊」版本。 – pashakym