我有一个离线在线应用程序,我发现其中有一个奇怪的问题,可能不是,但我不明白。
应用程序的要求是,如果互联网可用,即使从启动应用程序或恢复,我也会调用网络服务并将数据存储在 sqlite 中,否则应用程序将保持离线模式,
我有 2 个活动,第二个活动包含一个 id,我通过意图传递它(这一点很重要),
我的问题:
如果我处于第二个活动,并且互联网正在运行,并且我按主页按钮,那么第二个活动暂停,然后停止,这是 Android 中的默认行为,我转到设置,关闭 wifi,然后按应用程序icon再次回到我的应用程序,在这里我很困惑,我希望我的应用程序现在将在onResume,但是当我在 logcat 中看到它时已创建呼叫和应用程序
崩溃,发生 nullPointerException,因为第二个活动没有该 id,我通过了意图。
Note:
如果我使用最近的应用程序按钮进入“设置”,然后在关闭 wifi 后再次返回,并重复所有这些行为,然后工作正常,它的 onResumes 称为而不是 oncreate ..
我的问题
为什么它在 onCreate 中进行,而我的期望是在我从应用程序图标返回时在 onResume 中?
NPE 的原因很明确,您的第二个活动没有价值并且崩溃了。
为什么你会有不同的行为呢!?
这是因为启动意图不同。当你“任务切换”时,Android 只是停止你的应用程序,但将其留在那里(没有保证)以防万一您想切换回来。
回家(带 home)清楚地表明您想要离开应用程序,尽管它将保留在内存中并缓存(只要有可用内存),但可以通过启动器(或您所说的应用程序图标)返回)触发 LAUNCHER 类别(首先进入您的 Activity 1)。
看一眼this https://stackoverflow.com/q/6356467/2684StackOverflow 问题(和答案)以更好地理解后果。
无论如何,您的问题是您的应用程序必须始终设计为在不一致的状态下恢复并能够恢复。安卓will杀死你的参考文献,会摧毁您的变量,并且很可能将您的应用程序发送到hell即使你让它运行,一夜之间......如果手机进入待机状态,没有做任何事情的进程很可能会被暂停/停止并可能被杀死。
重新设计您的应用程序,这样这就不再是问题了。
你说:
“我有 2 个活动,第二个活动包含一个 id,我通过了
通过意图(这一点很重要),”
那么,为什么不让它变得更简单并拥有一个活动和两个片段呢?然后使用Fragment Arguments来传递值?
或者为什么不将值存储在首选项和/或本地数据库中并在 onCreate 期间恢复它?
另外,为什么不这样做,以便如果 Activity 2 没有值,它会调用 Activity 1 并自行关闭(比崩溃更好,是吗?)。
Etc.
正如您所看到的,您应该考虑很多事情。总而言之,never相信你的应用程序会活着,因为它不会。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)