繁体   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