在我的应用程序中,我有一个listView。
我一次填充了这个listView 10个项目。
所以,当我显示spalsh屏幕时,我在后台获取了前10个项目。一旦闪屏消失,用户可以看到前10个项目。
现在,在包含此listView的活动中,我编写了如下内容:
onLastItemReached(){
getNextten();
}工作正常。当我从这个listViewActivity转到其他活动时,我设置了标志,这样当按下back时,之前浏览过的所有项目都会保留下来(我的意思是,如果用户向下滚动到100个项目,单击一个项目,然后转到某个活动,然后单击设备后退按钮,他将显示第100个项目,剩下的99个项目不需要再次获取)。
问题是,当我关闭应用程序并在5-10分钟后打开它时,它会说:
ArrayIndexOutOfBoundsException如果我在1-3分钟内重新打开它,它工作得很好。
对不起,我不能发布任何代码,因为所有的活动大约有800行。
任何人都知道为什么我总是得到这个异常。我想知道的是,有没有像if an app is in background for more than 5 mins remove all its data这样的
编辑:
我关闭我的应用程序,我的意思是,当我在ListView屏幕上时,我按下主页按钮,5-10分钟后重新打开应用程序
这是我得到的StackTrace,我正在尝试处理unCaughtExceptions:
threadid=1: thread exiting with uncaught exception (group=0x40020660)
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Android.WiC_MobileApp/com.Android.WiC_MobileApp.FeedListViewActivity}: java.lang.ArrayIndexOutOfBoundsException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1728)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1747)
at android.app.ActivityThread.access$1500(ActivityThread.java:155)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:993)因此,在查看我的log cat之后,它显示错误在第201行,该行包含:
Log.d("array of product names", SplashActivity.products_array[0] + "--"
+ SplashActivity.products_array[1]);这是一个在SplashActivity中填充的数组,并设置为public static。
发布于 2012-08-29 21:29:17
如果应用程序在后台的时间超过5分钟,请移除其所有数据
这实际上可能在1分钟内发生。它只是依赖于系统运行的环境。当你按下主页按钮(或活动顶部的后退按钮)时,系统会将你的应用程序置于休眠模式。它会将其保存在内存中,直到需要该内存。这允许用户在他们只是想要快速切换并返回的情况下快速返回它。几分钟后,如果用户打开了游戏或其他东西,操作系统可能会决定将应用程序从内存中删除。在这种情况下,当用户重新打开您的应用程序时,您必须从头开始重新构建所有内容。
应用程序崩溃的原因是因为您试图在应用程序实际重新构建ListView之前检索元素。如果应用程序还在内存中,它就能工作,因为一切都还在构建中。如果应用程序被删除,那么列表必须重新构建、重新膨胀或其他任何东西。然后尝试检索元素。
发布于 2012-08-29 22:17:00
当你的应用程序在后台时,Android可以在任何时候终止它(只需终止运行你的活动的进程)。如果用户想要返回你的应用程序,Android会为你的应用程序创建一个新的进程,然后只重新创建活动堆栈顶部的活动(即:当你的应用程序转到后台时正在显示的活动)。
从日志中看,你的应用程序在试图启动FeedListViewActivity时崩溃了。因为这可能是你的应用程序转到后台时显示的活动,所以看起来Android正在尝试重新创建该活动,这意味着当应用程序在后台时,你的进程被终止了(参见上面的解释)。
您说您试图访问的数据是由SplashActivity设置的,并保存在一个静态变量中。问题是,当Android为你创建一个新的进程时,它只会重新创建顶部的活动,而不是它下面的所有活动。它不会重新创建SplashActivity,因此该变量尚未初始化。
以下是一些可能的替代方案来处理此问题:
onCreate() of FeedListViewActivity中重新创建,如果是,则需要重新创建SplashActivity先前为您设置的数据列表。您可以通过以下方法来判断进程是否已重新创建:在进程运行时,将public static boolean变量设置为true;如果进程已在onCreate() of FeedListViewActivity中重新创建,则在FeedListViewActivity.SplashActivity,通过将数据保存到onSaveInstanceState()中的包来启动整个应用程序。Android将在进程终止之前对您的活动调用此方法,以便您有机会在重新创建活动/流程时保存您稍后可能需要的任何数据。您需要恢复onCreate()中的数据和/或onRestoreInstanceState().发布于 2012-08-29 21:26:34
您将获得ArrayIndexOutOfBoundsException,因为每次当您到达最后一项时,您都会尝试多读取10条记录。
但是假设您的数组有50条记录。当您达到50岁时,您将再次阅读新的10记录。表示51-60
这就是为什么你会得到异常
onLastItemReached(){
if(totalDispayed < yourArray.length()) <-----
getNextten();
}你需要像我上面提到的那样实现一些东西
https://stackoverflow.com/questions/12179005
复制相似问题