2016-02-19 54 views
2

我構建了這個應用程序,拍攝照片,顯示他們接受並通過信息上傳到網絡服務器。應用程序凍結幾次重新啓動後

它的概念和執行非常簡單。但是,這款應用在Android手機中處於凍結狀態(我有一款Xperia Z3 +,我擁有相當不錯的資源量,也在Moto X上試用過)。

要嘗試重現此我拍照(它會自動嘗試上傳)...按下電源按鈕,屏幕關閉...然後當我點亮屏幕還需要一段時間的應用再次開始工作(我可以看到,因爲我有一個背景動畫)。經過一些重試...應用程序將凍結,我將不得不關閉它重試。

有關如何解決此問題的任何建議?

我的想法是,我可以通過從屏幕上的動畫元素aliviate問題有點......至少感知性能會更好的應用程序未出現任何應用交換機上凍...因此我希望能夠使用活動生命週期事件中的onPause,onStop來清除動畫。我猜這些對象是序列化的,所以我會保存序列化和反序列化時間,並且感知的性能會提高,因爲在onResume,onRestart事件時不會看到凍結的應用程序。

這是可行嗎?

非常感謝您 查

+0

到目前爲止,我發現,我只需要留下足夠大的形式重現這個...我加入約100個組件每當我嘗試返回到應用程序時它都會凍結。 – Chuck

+0

還發現標記字段爲瞬態對應用程序狀態還原沒有影響。 – Chuck

回答

2

這不是由動畫引起的,可以通過未捕獲的異常或應用性能不佳造成的。

要查看你的應用程序的性能,移動任何長期的過程,需要反饋給UI (的AsyncTask)的表單postShow()方法,而不是beforeShow()。如果不要求實時(IntentService)反饋UI,可以考慮使用Display.getInstance().scheduleBackgroundTask()其在低優先級的線程中運行你的任務,而其序列,這可以在beforeShow()方法來完成。如果您的表單是手寫的(不是GUI),請在addShowListener()中執行繁重的長處理。

而且減少圖像的重加載圖像時,你在你的應用程序中使用,因爲這也可能會阻礙你的應用程序性能的量。

避免不必要的使用revalidate(),通常不通過循環調用它,這有點貴,用repaint()代替。

您也可以使用Android DDMS檢查,如果您的應用程序運行到一些錯誤。

鎖定屏幕或最小化應該不會影響您的應用程序,除非應用程序啓動並顯示啓動屏幕(如果您在顯示啓動畫面時將應用程序最小化,這通常會凍結應用程序)。我相信這是一個已知的問題。

另一種選擇可能是「掛起 - 恢復」的行爲。當應用程序暫停時(電源按鈕,來電等),調用stop()方法,然後在返回時調用start()方法。

如果在stop()方法中有進度指示器,則還原調用將重新顯示進度指示器,其中前一個表格是「之前的表格」。這樣,當進度指示被解除時,它顯示「先前的形式」。您可以使用「掛起/恢復」菜單在模擬器中測試此行爲。

要解決它只是處置進度指示器在stop()方法,例如:

public void stop() { 
    current = Display.getInstance().getCurrent(); 
    if(current instanceof Dialog) { 
     ((Dialog)current).dispose(); 
     current = Display.getInstance().getCurrent(); 
    } 
} 
+1

我在底部添加了另一個可能的原因 –

+0

我已經嘗試了大部分這個...... :(我不知道如何修復性能......我開始學習原生Android和IO ...... – Chuck

+0

然後我有一個想法,我想我的問題是,Android操作系統正在關閉我的應用程序來釋放資源。我怎樣才能保持它打開,直到關閉一個按鈕? – Chuck

相關問題