簡體   English   中英

長時間處於后台時,應用程序丟失數據

[英]Application loosing data when in background for long period

我的應用是從數據庫(greendao)填充列表視圖。 我有屏幕方向支持,因此可以在兩個方向上使用。 我的問題是,當應用程序長時間處於后台運行時(無法在發生這種情況時找到某個特定點),然后返回到該列表,列表視圖為空,並且如果我嘗試執行任何操作都會崩潰。

我無法調試該調試器,因為它僅在應用程序在后台運行一段時間時才會發生。

我通過填充數據庫中的arraylist並將其發送到適配器來填充listview。

有誰知道為什么會這樣?

編輯:廣播接收器問題解決

但是,仍然找不到列表視圖為空的原因。

我得到另一個logcat tho(問題是從數據庫:/獲取數據):

11-11 13:45:31.136: E/AndroidRuntime(4468): FATAL EXCEPTION: main
11-11 13:45:31.136: E/AndroidRuntime(4468): java.lang.NullPointerException
11-11 13:45:31.136: E/AndroidRuntime(4468):     at si.comtron.tronpos.content.DatabaseHelpers.viewArticleWithPrice(DatabaseHelpers.java:70)
11-11 13:45:31.136: E/AndroidRuntime(4468):     at si.comtron.tronpos.ArticlesFragment.onCreateView(ArticlesFragment.java:269)
11-11 13:45:31.136: E/AndroidRuntime(4468):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:831)
11-11 13:45:31.136: E/AndroidRuntime(4468):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1037)
11-11 13:45:31.136: E/AndroidRuntime(4468):     at android.app.BackStackRecord.run(BackStackRecord.java:635)
11-11 13:45:31.136: E/AndroidRuntime(4468):     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1399)
11-11 13:45:31.136: E/AndroidRuntime(4468):     at android.app.FragmentManagerImpl$1.run(FragmentManager.java:428)
11-11 13:45:31.136: E/AndroidRuntime(4468):     at android.os.Handler.handleCallback(Handler.java:615)
11-11 13:45:31.136: E/AndroidRuntime(4468):     at android.os.Handler.dispatchMessage(Handler.java:92)
11-11 13:45:31.136: E/AndroidRuntime(4468):     at android.os.Looper.loop(Looper.java:155)
11-11 13:45:31.136: E/AndroidRuntime(4468):     at android.app.ActivityThread.main(ActivityThread.java:5511)
11-11 13:45:31.136: E/AndroidRuntime(4468):     at java.lang.reflect.Method.invokeNative(Native Method)
11-11 13:45:31.136: E/AndroidRuntime(4468):     at java.lang.reflect.Method.invoke(Method.java:511)
11-11 13:45:31.136: E/AndroidRuntime(4468):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)
11-11 13:45:31.136: E/AndroidRuntime(4468):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796)
11-11 13:45:31.136: E/AndroidRuntime(4468):     at dalvik.system.NativeStart.main(Native Method)

轉到手機上的Developer Options ,然后選中Don't save Activities復選框。 這樣,您的任何“ Activities只要在后台就被殺死,您很可能將能夠重現問題而無需等待。

IntentReceiver si.comtron.tronpos.USB.USBService$1@4197ac28最初在此處注冊。 您是否缺少對unregisterReceiver()的調用?

看來您正在使用BroadcastReceiver

onPause()注銷接收者:

@Override
protected void onPause() {
    super.onPause();
    unregisterReceiver(yourReceiver);
}

有誰知道為什么會這樣?

您的應用進程由於內存不足而終止,但它仍存在於“近期任務”列表中。 當您嘗試返回該應用程序時,Android為您創建了一個新的流程,並啟動了您上一次進行的活動...並且您假設流程中的其他內容已經存在,而實際並非如此。

您可以創建一個包含所有數據的文件,在活動的OnCreate中,您應檢查變量是否包含數據。如果沒有,則可以從以前保存的文件中提取數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM