2016-01-13 83 views
3

我添加了一些也包含IntentService的cordova插件代碼。檢查crosswalk是否通過javacode運行

即使應用未運行,也會定期調用此服務。但是像「new XWalkCookieManager()。getCookie(url)」這樣的crosswalkmethods會崩潰(「此應用程序已關閉」+在logcat中崩潰)。實例​​確實工作正常,但getCookie崩潰。

我已經嘗試調試它沒有成功,因爲您不能將調試器附加到封閉的應用程序。

是否有一個XWalks類/方法中的某個屬性或方法用於檢查當前正在運行的人行橫道?

最佳將是這樣的:

if(new XWalkCookieManager().isAvailable()) { 
    //do stuff like getCookie 
} 

防止死機。

回答

0

與此同時,我找到了一種解決方法,以確保只有當應用程序未被殺死時才執行crosswalk-methods。它與我的用例高度相關,因此需要在另一段代碼中符合要求。

我的用例是,在後臺位置事件中,我想發送HTTP請求。在那裏我需要包含crosswalk-app的最後使用的cookie。我更改了應用程序,以便它始終將人行橫道cookie保存在SharedPreferences對象(它稱爲我的cordovaplugin並告訴它saveCookie(),然後該插件從人行橫道獲取它)。

對於閱讀cookie,這是足夠的,因爲我可以在任何時候從SharedPreferences讀取cookie。

現在的問題是:當我在回覆中收到新的cookie時,我可以將它們寫回人行橫道嗎?如果應用程序正在運行,我將不得不做new XWalkCookieManager().setCookies()。這會在死亡應用程序中執行時崩潰,因爲在locationupdate發生時crosswalk不在運行。

所以我的解決方法是:我會先將cookie保存回SharedPreferences。然後我發送一個Broadcast到包含cookie的MainActivity。我還擴展了MainActivity(帶有cordova鉤子腳本)以包含BroadcastReciever,然後將cookie保存到人行橫道。 MainActivity僅在應用程序運行時運行。當應用程序被殺害,因此MainActivity沒有運行,沒有人會收到此Broadcast,並沒有代碼崩潰。

對於一個應該可以更容易解決的問題來說,這是一個巨大的解決方法。但似乎沒有其他方式沒有人行橫道,可以告訴它是否正在運行(或只是沒有崩潰在這些getCookies()等方法)。